Hi Aaron thanks for the support.
Finally I can get a response when I create a record but the id field seems a bit odd. I am getting a negative number close to but not exactly int.MinValue . I think this is the temp id before record is saved to the db. İs this the expected behaviour?
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
using Abp.Linq.Extensions;
using System.Collections.Generic;
using System.Threading.Tasks;
using Abp.Domain.Repositories;
using Procure.Procurement.Dtos;
using Abp.Application.Services.Dto;
using Procure.Authorization;
using Abp.Authorization;
using Microsoft.EntityFrameworkCore;
namespace Procure.Procurement
{
[AbpAuthorize(AppPermissions.Pages_Procurement)]
public class ProcurementAppService : ProcureAppServiceBase, IProcurementAppService
{
private readonly IRepository<PEvent> _pEventRepository;
public ProcurementAppService(IRepository<PEvent> pEventRepository)
{
_pEventRepository = pEventRepository;
}
public async Task<PagedResultDto<PEventDto>> GetAll(GetAllPEventsInput input)
{
var query = _pEventRepository.GetAll().WhereIf(
!string.IsNullOrWhiteSpace(input.Filter),
e => e.Title.Contains(input.Filter) || e.Description.Contains(input.Filter)
);
var totalCount = await query.CountAsync();
var pEvents = await query
.OrderBy(input.Sorting ?? "id asc")
.PageBy(input)
.ToListAsync();
return new PagedResultDto<PEventDto>(
totalCount,
ObjectMapper.Map<List<PEventDto>>(pEvents)
);
}
[AbpAuthorize(AppPermissions.Pages_Procurement_Edit)]
public async Task<CreateOrEditPEventDto> GetPEventForEdit(EntityDto<int> input)
{
var pEvent = await _pEventRepository.FirstOrDefaultAsync(input.Id);
return ObjectMapper.Map<CreateOrEditPEventDto>(pEvent);
}
public async Task CreateOrEdit(CreateOrEditPEventDto input)
{
if(input.Id == null){
await Create(input);
}
else{
await Update(input);
}
}
[AbpAuthorize(AppPermissions.Pages_Procurement_Create)]
private async Task Create(CreateOrEditPEventDto input)
{
var pEvent = ObjectMapper.Map<PEvent>(input);
if (AbpSession.TenantId != null)
{
pEvent.TenantId = (int) AbpSession.TenantId;
}
await _pEventRepository.InsertAsync(pEvent);
}
[AbpAuthorize(AppPermissions.Pages_Procurement_Edit)]
private async Task Update(CreateOrEditPEventDto input)
{
var pEvent = await _pEventRepository.FirstOrDefaultAsync((int)input.Id);
ObjectMapper.Map(input, pEvent);
}
[AbpAuthorize(AppPermissions.Pages_Procurement_Delete)]
public async Task Delete(EntityDto<int> input)
{
await _pEventRepository.DeleteAsync(input.Id);
}
}
}
Here is the code in ts.
import { Component, ViewChild, Injector, Output, EventEmitter} from '@angular/core';
import { ModalDirective } from 'ngx-bootstrap';
import { ProcurementServiceProxy, CreateOrEditPEventDto} from '@shared/service-proxies/service-proxies';
import { AppComponentBase } from '@shared/common/app-component-base';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/toPromise';
@Component({
selector: 'createOrEditPEventModal',
templateUrl: './create-or-edit-pEvent-modal.component.html'
})
export class CreateOrEditPEventModalComponent extends AppComponentBase {
@ViewChild('createOrEditModal') modal: ModalDirective;
@Output() modalSave: EventEmitter<any> = new EventEmitter<any>();
active = false;
saving = false;
pEvent: CreateOrEditPEventDto = new CreateOrEditPEventDto();
constructor(
injector: Injector,
private _procurementServiceProxy: ProcurementServiceProxy
) {
super(injector);
}
ngOnInit(): void {
}
show(pEventId?: number): void {
if (!pEventId) {
this.pEvent = new CreateOrEditPEventDto();
this.pEvent.id = pEventId;
this.active = true;
this.modal.show();
}
else{
this._procurementServiceProxy.getPEventForEdit(pEventId).subscribe(pEventResult => {
this.pEvent = pEventResult;
this.active = true;
this.modal.show();
});
}
}
save(): void {
/* this.saving = true;
this._procurementServiceProxy.createOrEdit(this.pEvent)
.finally(() => { this.saving = false; })
.subscribe(() => {
this.notify.info(this.l('SavedSuccessfully'));
this.close();
this.modalSave.emit(null);
});
*/
this._procurementServiceProxy.createOrEdit(this.pEvent)
.finally(() => this.saving = false)
.subscribe(event => {
this.notify.info(this.l('SavedSuccessfully'));
alert(event);
});
}
close(): void {
this.active = false;
this.modal.hide();
}
}
Thanks Aaron ,
after subscribe I have tried to check the event value using a simple alert but it shows null. The value is submitted to the database fine but still cant get the eventid. I'm probably missing something simple but no idea what.
alert(event); //returns null
alert(event.Id); //returns null
this.newEventProduct.EventId = event.Id;
Thank you aaron for your response I was away for a few days. ( my wife was in labor and I took a few days off :D ).
I have tested out the .then statement but it is throwing an error saying "then does not exist on type 'Observable <void>' "
I have imported import { Observable } from 'rxjs/Observable'; but this does not resolve the problem. Am I missing something?
Hi guys,
I'm totallay new to the the aspnetzero and angular so please bear with me.
My objective is to create a procurement request form. Form has some generic fields and 2 areas where user can add products and invitees to the request.
Project type: Angular/Core I have 3 objects as follows: PEvent PEventProduct (Contains PEventID, ProductID, and fields like quantity required) PEventInvitee Product
I have no problems saving the initial Pevent Object but once inserted I need to get the object immediatly so that I can save products and invitees associated to it as well. Below code works for the first part where I insert the pevent. But it fails on second part stating EventId must be between 1 and 2147483647 I believe the problem will be solved if I can get the inserted objects eventid and pass it to neweventproduct.eventid.
The question is whether it is possible to get the resulting object after insert operation.
save(): void {
this._procurementService.createPEvent(this.pevent)
.finally(() => this.saving = false)
.subscribe(() => {
this.notify.info(this.l('SavedSuccessfully'));
});
//works up to here without a problem
//this.newEventProduct.EventId = <- Pass EventID here from the result
this._procurementService.addEventProduct(this.newEventProduct).subscribe(
result => {
this.editingPevent.eventProducts.push(result);
this.newEventProduct.quantity = 1;
this.notify.success(this.l('SavedSuccessfully'))
});
//errors here stating EventId must be between 1 and 2147483647
}