DATA: lv_storage_loc TYPE string,
lv_where_cls TYPE string,
lv_material_no TYPE string,
lv_spchar TYPE char1 VALUE '*',
lv_emp_id TYPE cod_service_emp,
lv_emp_name TYPE char80,
lv_fname TYPE char40,
lv_lname TYPE char40,
lv_plant TYPE string,
ls_out TYPE zsw_van_stck_rtrn.
DATA: BEGIN OF ls_output,
lv_matnr TYPE matnr,
lv_stloc TYPE lgort_d,
lv_descr TYPE maktx,
lv_qty TYPE labst,
END OF ls_output,
lt_output LIKE TABLE OF ls_output.
* Generate Data record for this FM
fbgenmac 'ZFM_VANSTOCK_WEBSERV'.
IF iv_emp_id IS NOT INITIAL.
* Get employee name
SELECT SINGLE vorna, nachn FROM pa0002 INTO (@lv_fname,@lv_lname) WHERE pernr = @iv_emp_id.
IF sy-subrc = 0.
* Get Storage location assigned to employee
SELECT SINGLE storage_loc, plant FROM cod_plant_srv INTO (@lv_storage_loc,@lv_plant) WHERE service_tech = @iv_emp_id.
* Start building where clause based on input
IF lv_storage_loc IS NOT INITIAL.
CONCATENATE '''' lv_storage_loc '''' INTO lv_storage_loc.
CONCATENATE 'a~LGORT' 'EQ' lv_storage_loc INTO lv_where_cls SEPARATED BY space.
* Add condition for material based on pattern if provided
IF iv_material_no IS NOT INITIAL.
IF iv_material_no CA lv_spchar.
REPLACE lv_spchar INTO iv_material_no WITH '%'.
CONCATENATE '''' iv_material_no '''' INTO lv_material_no.
CONCATENATE lv_where_cls 'AND' 'a~MATNR' 'LIKE' lv_material_no INTO lv_where_cls SEPARATED BY space.
ELSE.
CONCATENATE '''' iv_material_no '''' INTO lv_material_no.
CONCATENATE lv_where_cls 'AND' 'a~MATNR' 'EQ' lv_material_no INTO lv_where_cls SEPARATED BY space.
ENDIF.
ELSE.
CONCATENATE lv_where_cls 'AND' 'a~MATNR' 'LIKE' '''%''' INTO lv_where_cls SEPARATED BY space.
ENDIF.
* Finish where clause and fire query to fetch data
IF lv_where_cls IS NOT INITIAL.
CONCATENATE '''' lv_plant '''' INTO lv_plant.
CONCATENATE lv_where_cls 'AND' 'a~WERKS' 'EQ' lv_plant 'AND' 'b~SPRAS' 'EQ' '''E''' INTO lv_where_cls SEPARATED BY space.
SELECT a~matnr, a~lgort, b~maktx, a~labst FROM mard AS a INNER JOIN makt AS b ON a~matnr = b~matnr WHERE (lv_where_cls) ORDER BY a~matnr
INTO TABLE @lt_output.
ENDIF.
* Prepare output
CONDENSE lv_fname.
CONDENSE lv_lname.
IF sy-subrc = 0.
LOOP AT lt_output INTO ls_output.
ls_out-ev_material_no = ls_output-lv_matnr.
CONCATENATE lv_fname lv_lname INTO ls_out-ev_empl_name SEPARATED BY space.
ls_out-ev_description = ls_output-lv_descr.
ls_out-ev_stock = ls_output-lv_qty.
APPEND ls_out TO et_results.
ENDLOOP.
ELSE.
ls_out-ev_material_no = iv_material_no.
CONCATENATE lv_fname lv_lname INTO ls_out-ev_empl_name SEPARATED BY space.
ls_out-ev_description = TEXT-001.
APPEND ls_out TO et_results.
ENDIF.
ELSE.
CONDENSE lv_fname.
CONDENSE lv_lname.
CONCATENATE lv_fname lv_lname INTO ls_out-ev_empl_name SEPARATED BY space.
ls_out-ev_description = TEXT-002.
APPEND ls_out TO et_results.
ENDIF.
ELSE.
ls_out-ev_empl_name = TEXT-003.
APPEND ls_out TO et_results.
ENDIF.
ELSE.
ls_out-ev_empl_name = TEXT-004.
APPEND ls_out TO et_results.
ENDIF.
import ABSL;
import AP.Common.GDT;
import AP.CRM.Global;
import CommunicationServicesManagement.Global;
import AP.PC.IdentityManagement.Global;
import AP.FO.BusinessPartner.Global;
import AP.FO.ProductDataMaintenance.Global;
var requestVanStock: Library::VanStockWebService.ZfmVanstockWebserv.Request;
var responseVanStock: Library::VanStockWebService.ZfmVanstockWebserv.Response;
/*Below code is written to get Employee ID which need to be passed to Web Service.
1. See if User has selected Employee ID via F4 help provided on emplID field on screen
If yes then get it's External ID to pass to Web Service
2. If Employee ID is not selected then first we need to set a default id to this field
Default id is to be set as
a. Service Technician for current opened ticket
b. If Service Technician is not set in ticket then get current logged in user
After this employee is determined get thier External ID and set it in Web Service
import parameter */
if(!this.emplID.IsInitial()){
var empQuery = Employee.Identification.QueryByEmployeeAttributes;
var selParam = empQuery.CreateSelectionParams();
selParam.Add(empQuery.EmployeeID.content,"I","EQ",this.emplID.RemoveLeadingZeros().content);
var empResult = empQuery.Execute(selParam);
if(empResult.Count() > 0){
var empInst = empResult.GetFirst();
var objectQuery = ObjectIdentifierMapping.QueryByElements;
var selectParam = objectQuery.CreateSelectionParams();
selectParam.Add(objectQuery.LocalObjectNodeReference.UUID.content,"I","EQ",empInst.ToParent.UUID.content);
var objQueryRes = objectQuery.Execute(selectParam);
if(objQueryRes.Count() > 0){
var objectIDMapp = objQueryRes.GetFirst();
if(!objectIDMapp.RemoteObjectID.IsInitial()){
requestVanStock.IvEmpId = objectIDMapp.RemoteObjectID.content;
}
}
}
}
else{
var serviceTechnPartyCol = this.Party.Where(n=>n.RoleCode == "43");
if(serviceTechnPartyCol.Count() > 0){
var servTechnInst = serviceTechnPartyCol.GetFirst();
if(servTechnInst.Party.BusinessPartner.IsSet()){
var objectIdMappCol = servTechnInst.Party.BusinessPartner.ObjectIdentifierMapping;
if(objectIdMappCol.Count() > 0){
var objectIDMapp = objectIdMappCol.GetFirst();
if(!objectIDMapp.RemoteObjectID.IsInitial()){
requestVanStock.IvEmpId = objectIDMapp.RemoteObjectID.content;
this.emplID.content = servTechnInst.Party.Employee.IdentificationEmployeeID.EmployeeID.RemoveLeadingZeros().content;
}
}
}
}
else{
var identityUUID = Context.GetCurrentIdentityUUID();
var identity = Identity.Retrieve(identityUUID);
if(identity.IsSet()){
var partnerInst = BusinessPartner.Retrieve(identity.BusinessPartnerUUID);
if(partnerInst.IsSet()){
var objectIdMappCol = partnerInst.ObjectIdentifierMapping;
if(objectIdMappCol.Count() > 0){
var objectIDMapp = objectIdMappCol.GetFirst();
if(!objectIDMapp.RemoteObjectID.IsInitial()){
requestVanStock.IvEmpId = objectIDMapp.RemoteObjectID.content;
this.emplID.content = partnerInst.InternalID.RemoveLeadingZeros();
}
}
}
}
}
}
/*This below code is written to provide user a flexible search using wild card parameter(*)
This will ensure that right pattern is passed to Web Service*/
if(!this.materialNumb.IsInitial()){
var material = this.materialNumb.Replace("*","%");
var pos = material.Find("%");
var nextPos = material.FindLast("%");
if(pos != nextPos){
if(pos == 0 || nextPos == (this.materialNumb.Length() - 1)){
var subString1 = material.Substring(0,pos+1);
var subString2 = subString1.Replace("%","*");
var substring3 = material.Substring(pos+1,this.materialNumb.Length()-pos-1);
requestVanStock.IvMaterialNo = subString2.Concatenate(substring3);
}
else{
requestVanStock.IvMaterialNo = "%".Concatenate(material).Concatenate("*");
}
}
else{
if(pos == 0 || pos == (this.materialNumb.Length() - 1)){
requestVanStock.IvMaterialNo = this.materialNumb;
}
else{
requestVanStock.IvMaterialNo = "%".Concatenate(material).Concatenate("*");
}
}
}
else{
requestVanStock.IvMaterialNo = "*";
}
/*Call Web Service*/
responseVanStock = Library::VanStockWebService.ZfmVanstockWebserv(requestVanStock," ","VanStockWebService");
/*Once we receive results, either products or no result found, we will add them in our Node
Web Service has made sure that it will always have a result.
First we will delete current Van Stock node entries and then loop on received results
to create new rows inside our node extension*/
if(!responseVanStock.EtResults.IsInitial()){
var items = responseVanStock.EtResults.item;
if(this.VanStock.Count() > 0){
this.VanStock.Delete();
}
foreach(var item in items){
if(!item.EvStock.IsInitial()){
var vanStockNode: elementsof ServiceRequest.VanStock;
vanStockNode.MaterialNumber.content = item.EvMaterialNo;
vanStockNode.MatDescription = item.EvDescription;
vanStockNode.Stock.content = item.EvStock;
if(item.EvStockUnit.IsInitial() && !item.EvMaterialNo.IsInitial()){
var material = Material.Retrieve(vanStockNode.MaterialNumber);
if(material.IsSet() && material.ValuationQuantityUnit.IsSet()){
vanStockNode.Stock.unitCode = material.ValuationQuantityUnit.MeasureUnitCode;
}
else{
vanStockNode.Stock.unitCode = "EA";
}
}
vanStockNode.EmpName = item.EvEmplName;
this.VanStock.Create(vanStockNode);
}
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
5 | |
5 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 | |
3 |