thank you very much aaron. I solved problem.
PersonAppService.cs
namespace OKYS.Person.Services
{
public class PersonAppService : OKYSFastAppServiceBase, IPersonAppService
{
private readonly IRepository<VPersonInfo> _personRepository;
public PersonAppService() : base()
{
_personRepository = new Repository<VPersonInfo>();
}
//Methods
[HttpPost]
public async Task<PagedResultDto<VPersonInfo>> GetData(FGetEntityExpression searchParams)
{
return await _personRepository.GetDataWithPaging(searchParams);
}
public async Task<VPersonInfo> SelectById(int pkId)
{
return await _personRepository.Select(pkId);
}
public async Task<VPersonInfo> Select(List<FSearchExpression> expressionList)
{
return await _personRepository.Select(expressionList);
}
[HttpDelete]
public async Task<ProcessResult> DeleteById(int pkId)
{
return await _personRepository.Delete(pkId);
}
[HttpPost]
public async Task<ProcessResult> Delete(VPersonInfo personInfo)
{
return await _personRepository.Delete(personInfo);
}
public async Task<VPersonInfo> Insert(VPersonInfo personInfo)
{
long? userId = base.AbpSession.UserId; //when called from web app userId is not null. But when ı call from StudentAppService.cs userId gets null.
personInfo.OrganizationId = new OrganizationAppService().GetUserOrganizationData(userId);
return await _personRepository.Insert(personInfo);
}
[HttpPost]
public async Task<VPersonInfo> Update(VPersonInfo personInfo)
{
return await _personRepository.Update(personInfo);
}
}
}
StudentRegisterService.cs
namespace OKYS.Student.Services
{
public class StudentAppService : OKYSFastAppServiceBase, IStudentAppService
{
private readonly IRepository<VStudentInfo> _StudentRepository;
public StudentAppService() : base()
{
_StudentRepository = new Repository<VStudentInfo>();
}
//Methods
[HttpPost]
public async Task<PagedResultDto<VStudentInfo>> GetData(FGetEntityExpression searchParams)
{
return await _StudentRepository.GetDataWithPaging(searchParams);
}
public async Task<VStudentInfo> SelectById(int pkId)
{
return await _StudentRepository.Select(pkId);
}
public async Task<VStudentInfo> Select(List<FSearchExpression> expressionList)
{
return await _StudentRepository.Select(expressionList);
}
[HttpDelete]
public async Task<ProcessResult> DeleteById(int pkId)
{
return await _StudentRepository.Delete(pkId);
}
[HttpPost]
public async Task<ProcessResult> Delete(VStudentInfo StudentInfo)
{
return await _StudentRepository.Delete(StudentInfo);
}
public async Task<VStudentInfo> Insert(VStudentInfo StudentInfo)
{
return await _StudentRepository.Insert(StudentInfo);
}
[HttpPost]
public async Task<VStudentInfo> Update(VStudentInfo StudentInfo)
{
return await _StudentRepository.Update(StudentInfo);
}
public async Task<ProcessResult> RegisterStudent(StudentInpuOutputDto input)
{
ProcessResult result = new ProcessResult(true);
input.StudentPerson = await new PersonAppService().Insert(input.StudentPerson);
input.Student.PersonId = input.StudentPerson.PersonId;
input.Student = await new StudentAppService().Insert(input.Student);
result.RecordID = input.Student.StudentId;
return result;
}
}
}
Hi.
Yes How can i call AppService1 in your application like @aaron asked ? I'm using web app(angular).
For Example: ı have a PersonAppService. İt has insert,update,delete,get methodts for using clients. Same time I need to use the organizationId to which the session user belongs when I register.
Everything is right here. I can that when ı call insert or update method from client. I can see user from base.GetCurrentUser();
But, I have a second app service. It name is StudentService(has insert,update,delete, get methods). Student table is relasionship to person table with PersonId. When I want to save the student I will add the person first and then add the PersonId to student. So ı have to use PersonServiceApp in SetudentServiceApp. I think this way bast way for this demand.
as a result have can i get CurrentUser when user AppService in another AppService.
Thanks.
there is no one to answer? I need to solve this problem. please
I have same problem.
I have to AppService. When ı call service methot from angular client ı can see current user base.GetCurrentUser(). But ı call service method from another service base.GetCurrentUser() return null. Please help. thanks.
Hi!.
how can I get the phone format of the selected language. I want to use for input mask in angular.
Hi!
I created custom session class. And ı can call it in my services. i can get session property value when i set add claim at TokenAuthController.cs>Authenticate methot.(loginResult.Identity.AddClaim(new Claim("Application_ActiveSchoolName", "High Trade School"))).
But i can't get value when i set value in any service methot.
FastAppSession.cs
public class FastAppSession : ClaimsAbpSession, ITransientDependency
{
public FastAppSession(
IPrincipalAccessor principalAccessor,
IMultiTenancyConfig multiTenancy,
ITenantResolver tenantResolver,
IAmbientScopeProvider<SessionOverride> sessionOverrideScopeProvider) :
base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider)
{
}
public string ActiveSchoolName
{
get
{
var activeSchoolName = PrincipalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == "Application_ActiveSchoolName");
if (string.IsNullOrEmpty(activeSchoolName?.Value))
{
return null;
}
return activeSchoolName.Value;
}
set
{
((ClaimsIdentity)PrincipalAccessor.Principal?.Identity).AddClaim(new Claim("Application_ActiveSchoolName", value));
}
}
}
OgrenciAppService.cs
public class OgrenciAppService : OKYSFastAppServiceBase, IOgrenciAppService
{
private IRepository<VOgrenciInfo> _ogrenciRepository;
public OgrenciAppService() : base()
{
_ogrenciRepository = new Repository<VOgrenciInfo>();
}
//Methods
[HttpPost]
public async Task<PagedResultDto<VOgrenciInfo>> GetData(FGetEntityExpression searchParams)
{
string test = FastAppSession.ActiveSchoolName; //it return null every calling
FastAppSession.ActiveSchoolName = "High Trade School";
test = FastAppSession.ActiveSchoolName; //it return setting value one time.
return await _ogrenciRepository.GetDataWithPaging(searchParams);
}
}
I'm getting the same error. I copied xxx\angular\src\app\admin\audit-logs\audit-logs.component.ts and changed own component.
.ts File
import { NgModule } from '@angular/core';
import { Component, AfterViewInit, Injector, ViewEncapsulation, ViewChild } from '@angular/core';
import { NotifyService } from '@abp/notify/notify.service';
import { AppComponentBase } from '@shared/common/app-component-base';
import { appModuleAnimation } from '@shared/animations/routerTransition';
import { DataTable } from 'primeng/components/datatable/datatable';
import { Paginator } from 'primeng/components/paginator/paginator';
import { LazyLoadEvent } from 'primeng/components/common/lazyloadevent';
import { OgrenciServiceProxy, VOgrenciInfo, PagedResultDtoOfVOgrenciInfo, FGetEntityExpression, FSearchExpression } from '@shared/service-proxies/service-proxies';
@Component({
templateUrl: './ogrenci-list.component.html',
encapsulation: ViewEncapsulation.None,
animations: [appModuleAnimation()]
})
export class OgrenciListComponent extends AppComponentBase {
@ViewChild('dataTable') dataTable: DataTable;
@ViewChild('paginator') paginator: Paginator;
ogrenciList: VOgrenciInfo[] = [];
searchExp = new FGetEntityExpression();
fSearchExpression = new FSearchExpression();
constructor(
injector: Injector,
private _ogrenciService: OgrenciServiceProxy,
private _notifyService: NotifyService
) {
super(injector);
this.searchExp.maxResultCount = 20;
this.searchExp.skipCount = 0;
this.primengDatatableHelper.totalRecordsCount = 0;
this.fSearchExpression.propName = "OgrenciId";
this.fSearchExpression.searchOperator = 4;
this.fSearchExpression.searchAndOrOperator = 0;
this.fSearchExpression.value1 = 4;
this.searchExp.expressionList = new Array<FSearchExpression>();
this.searchExp.expressionList.push(this.fSearchExpression);
}
getOgrenci(event?: LazyLoadEvent) {
this.primengDatatableHelper.showLoadingIndicator();
this._ogrenciService.getData(this.searchExp).subscribe(result => {
this.ogrenciList = result.items;
this.primengDatatableHelper.records = result.items;
this.primengDatatableHelper.totalRecordsCount = result.items.length;
this.primengDatatableHelper.hideLoadingIndicator();
});
}
}
.html file
<div [@routerTransition]>
<div class="row margin-bottom-5">
<div class="col-xs-6">
<div class="page-head">
<div class="page-title">
<h1>
<span>{{l("Student")}}</span>
</h1>
</div>
</div>
</div>
<div class="col-xs-6 text-right">
</div>
</div>
<div class="portlet light margin-bottom-0">
<div class="portlet-body">
<div class="primeng-datatable-container" [busyIf]="primengDatatableHelper.isLoading">
<div class="primeng-paging-container">
<p-paginator rows="{{primengDatatableHelper.defaultRecordsCountPerPage}}"
#paginator
(onPageChange)="getOgrenci($event)"
[totalRecords]="primengDatatableHelper.totalRecordsCount"
[rowsPerPageOptions]="primengDatatableHelper.predefinedRecordsCountPerPage">
</p-paginator>
<span class="total-records-count">
{{l('TotalRecordsCount', primengDatatableHelper.totalRecordsCount)}}
</span>
</div>
</div>
</div>
</div>
</div>