// RowDataを残すしてから execute にします(@future ではない) global class MDMITMWebService { public static boolean isRunning = false; // Integer batchsize = 200; 考量する必要がないと思います。 global class ItemMasters { webservice NFMUtil.Monitoring Monitoring; webservice MDMITMWebService.ItemMaster[] ItemMaster; } global class ItemMaster { webservice String InterfaceNumber; webservice Integer RecordCount; webservice MDMITMWebService.Record[] Record; } global class Record { webservice String MaterialNumber; webservice MDMITMWebService.MaterialDescription[] MaterialDescription; webservice String ModelForSales; webservice String RepairCode; webservice String Layer1st; webservice String Layer2nd; webservice String Layer3rd; webservice String Layer4th; webservice String Layer5th; webservice MDMITMWebService.ProductLotSerialNoTraceability[] ProductLotSerialNoTraceability; webservice Integer LifeTime; webservice String MCompany; webservice String BaseUnitOfMeasure; webservice MDMITMWebService.BusinessSegmentName BusinessSegmentName; webservice String To; //=======xinhonglu=============Start=============20180827=========== //HHOA-B3L8G6[委托]销售:产品主数据接口(MDMITM)修改 webservice MDMITMWebService.QuantityPerSalesPackagingUnit[] QuantityPerSalesPackagingUnit; webservice MDMITMWebService.EANUPC[] EANUPC; webservice String CN_SalesPackagingUnit; webservice String GrossWeight; webservice String WeightUnit; webservice String CN_LonerType; webservice MDMITMWebService.MaterialClassificationCode MaterialClassificationCode; webservice MDMITMWebService.WoodWeight[] WoodWeight; webservice MDMITMWebService.SalesPackagingUnit[] SalesPackagingUnit; webservice MDMITMWebService.AbbreviatedModelName AbbreviatedModelName; webservice MDMITMWebService.GMSCCode GMSCCode; webservice MDMITMWebService.ProductionExpriyDateHandling[] ProductionExpriyDateHandling; webservice MDMITMWebService.MBCGHQDeliveryStartDate MBCGHQDeliveryStartDate; webservice MDMITMWebService.MaterialStatus[] MaterialStatus; webservice MDMITMWebService.ProductDiscontinuationDate ProductDiscontinuationDate; webservice MDMITMWebService.RepairableUnrepairable RepairableUnrepairable; webservice MDMITMWebService.DangerousGoodsFlag[] DangerousGoodsFlag; webservice MDMITMWebService.UNNumber1[] UNNumber1; webservice MDMITMWebService.UNNumber2[] UNNumber2; webservice MDMITMWebService.UNNumber3[] UNNumber3; webservice MDMITMWebService.UNNumber4[] UNNumber4; webservice MDMITMWebService.DangerClass1A[] DangerClass1A; webservice MDMITMWebService.DangerClass2A[] DangerClass2A; webservice MDMITMWebService.DangerClass3A[] DangerClass3A; webservice MDMITMWebService.DangerClass4A[] DangerClass4A; webservice MDMITMWebService.DangerClass1B[] DangerClass1B; webservice MDMITMWebService.DangerClass2B[] DangerClass2B; webservice MDMITMWebService.DangerClass3B[] DangerClass3B; webservice MDMITMWebService.DangerClass4B[] DangerClass4B; webservice MDMITMWebService.UNPackingGroup1[] UNPackingGroup1; webservice MDMITMWebService.UNPackingGroup2[] UNPackingGroup2; webservice MDMITMWebService.UNPackingGroup3[] UNPackingGroup3; webservice MDMITMWebService.UNPackingGroup4[] UNPackingGroup4; webservice MDMITMWebService.ProperShippingName1[] ProperShippingName1; webservice MDMITMWebService.ProperShippingName2[] ProperShippingName2; webservice MDMITMWebService.ProperShippingName3[] ProperShippingName3; webservice MDMITMWebService.ProperShippingName4[] ProperShippingName4; webservice MDMITMWebService.WEEEClassification[] WEEEClassification; webservice MDMITMWebService.WEEE2Classification[] WEEE2Classification; webservice MDMITMWebService.WEEEWeight[] WEEEWeight; webservice MDMITMWebService.BatteryType1[] BatteryType1; webservice MDMITMWebService.BatterySystemName1[] BatterySystemName1; webservice MDMITMWebService.BatteryQuantity1[] BatteryQuantity1; webservice MDMITMWebService.BatteryWeight1[] BatteryWeight1; webservice MDMITMWebService.BatteryType2[] BatteryType2; webservice MDMITMWebService.BatterySystemName2[] BatterySystemName2; webservice MDMITMWebService.BatteryQuantity2[] BatteryQuantity2; webservice MDMITMWebService.BatteryWeight2[] BatteryWeight2; webservice MDMITMWebService.GlassWeight[] GlassWeight; webservice MDMITMWebService.PaperCardboardWeight[] PaperCardboardWeight; webservice MDMITMWebService.SteelWeight[] SteelWeight; webservice MDMITMWebService.AluminiumWeight[] AluminiumWeight; webservice MDMITMWebService.PlasticWeight[] PlasticWeight; webservice MDMITMWebService.EPSWeight[] EPSWeight; webservice MDMITMWebService.HSCodeCustomCodes[] HSCodeCustomCodes; webservice MDMITMWebService.DualUseIndicator DualUseIndicator; webservice MDMITMWebService.SupplierProductNumber SupplierProductNumber; webservice MDMITMWebService.BusinessSegmentCode BusinessSegmentCode; webservice MDMITMWebService.BusinessGroup BusinessGroup; webservice MDMITMWebService.OtherWeight[] OtherWeight; webservice MDMITMWebService.CarbonFootprint[] CarbonFootprint; webservice MDMITMWebService.COSHH[] COSHH; webservice MDMITMWebService.RoHS[] RoHS; webservice MDMITMWebService.REACH[] REACH; webservice MDMITMWebService.SKU_QtyPerPallet[] SKU_QtyPerPallet ; webservice MDMITMWebService.MultiPackGTIN[] MultiPackGTIN ; webservice MDMITMWebService.MultiPack[] MultiPack ; webservice MDMITMWebService.SinglePackGTIN[] SinglePackGTIN; webservice MDMITMWebService.SinglePack[] SinglePack; webservice MDMITMWebService.DeviceGTIN[] DeviceGTIN; webservice MDMITMWebService.DPM[] DPM ; webservice MDMITMWebService.ProductionDateFlag[] ProductionDateFlag; webservice MDMITMWebService.GS1_128Flag[] GS1_128Flag; webservice MDMITMWebService.MultiPackWidth[] MultiPackWidth; webservice MDMITMWebService.MultiPackHeight[] MultiPackHeight; webservice MDMITMWebService.MultiPackLength[] MultiPackLength; webservice MDMITMWebService.MultiPackWeight[] MultiPackWeight; webservice MDMITMWebService.VirtualItemFlag[] VirtualItemFlag; webservice MDMITMWebService.ManufacturerSite[] ManufacturerSite; webservice String[] CN_String1; webservice String[] CN_String2; webservice String[] CN_String3; webservice String[] CN_String4; webservice String[] CN_String5; webservice String[] CN_Dec1; webservice String[] CN_Dec2; webservice String[] CN_Dec3; webservice String[] CN_Dec4; webservice String[] CN_Dec5; webservice String[] CN_Date1; webservice String[] CN_Date2; webservice String[] CN_Date3; webservice String[] CN_Date4; webservice String[] CN_Date5; webservice String SizeDimensions; webservice String[] MaterialGroup; webservice String[] IndustrialSector; webservice String[] TransportationGroup; webservice String[] ExtMatlgroup; webservice String[] RA_GMDNNumber; webservice String[] RA_FDAReqNumber; webservice String[] RA_510k; webservice String[] RA_ListingNumber; webservice String[] RA_ProductCode; webservice String[] RA_EstablishmentCode; webservice String[] SalesStartDate; webservice String[] SalesDiscontinuationDate; webservice String[] NFM_Category; webservice String[] OCN_Material_Group; webservice String[] Vendor; webservice String[] Sales_Product_Description; webservice String[] EANCategory; webservice String FromBC; webservice String UpdateFlag; webservice String[] ValuationClass; webservice String[] CountryOfOrigin; //====================End=============20180827=========== } global class MaterialDescription { webservice String LanguageKey; webservice String Description; } global class ProductLotSerialNoTraceability { webservice String Value; } global class BusinessSegmentName { webservice String Value; } //========xinhonglu=======add=====Start=============20180827=========== global class EANUPC{ webservice String Category; webservice String Value; } global class QuantityPerSalesPackagingUnit{ //HHOA-BC5A4H LHJ 20190513 Start //webservice Integer value; webservice String value; //HHOA-BC5A4H LHJ 20190513 End } global class AbbreviatedModelName{ webservice String Value; } global class MaterialClassificationCode{ webservice String Value; } global class GMSCCode{ webservice String Value; } global class ProductionExpriyDateHandling{ webservice String Value; } global class MBCGHQDeliveryStartDate{ webservice String Value; } global class MaterialStatus{ webservice String Value; } global class ProductDiscontinuationDate{ webservice String Value; } global class RepairableUnrepairable{ webservice String Value; } global class DangerousGoodsFlag{ webservice String Value; } global class UNNumber1{ webservice Integer Value; } global class UNNumber2{ webservice Integer Value; } global class UNNumber3{ webservice Integer Value; } global class UNNumber4{ webservice Integer Value; } global class DangerClass1A{ webservice String Value; } global class DangerClass1B{ webservice String Value; } global class DangerClass2A{ webservice String Value; } global class DangerClass2B{ webservice String Value; } global class DangerClass3A{ webservice String Value; } global class DangerClass3B{ webservice String Value; } global class DangerClass4A{ webservice String Value; } global class DangerClass4B{ webservice String Value; } global class UNPackingGroup1{ webservice String Value; } global class UNPackingGroup2{ webservice String Value; } global class UNPackingGroup3{ webservice String Value; } global class UNPackingGroup4{ webservice String Value; } global class ProperShippingName1{ webservice String Value; } global class ProperShippingName2{ webservice String Value; } global class ProperShippingName3{ webservice String Value; } global class ProperShippingName4{ webservice String Value; } global class WEEEClassification{ webservice String Value; } global class WEEE2Classification{ webservice String Value; } global class WEEEWeight{ webservice Decimal Value; } global class BatteryType1{ webservice String Value; } global class BatterySystemName1{ webservice String Value; } global class BatteryQuantity1{ webservice Integer Value; } global class BatteryWeight1{ webservice Decimal Value; } global class BatteryType2{ webservice String Value; } global class BatterySystemName2{ webservice String Value; } global class BatteryQuantity2{ webservice Integer Value; } global class BatteryWeight2{ webservice Decimal Value; } global class GlassWeight{ webservice Decimal Value; } global class PaperCardboardWeight{ webservice Decimal Value; } global class SteelWeight{ webservice Decimal Value; } global class AluminiumWeight{ webservice Decimal Value; } global class PlasticWeight{ webservice Decimal Value; } global class EPSWeight{ webservice Decimal Value; } global class WoodWeight{ webservice Decimal Value; } global class SalesPackagingUnit{ webservice String Value; } global class HSCodeCustomCodes{ webservice String Value; } global class DualUseIndicator{ webservice String Value; } global class SupplierProductNumber{ webservice String Value; } global class BusinessSegmentCode{ webservice String Value; } global class BusinessGroup{ webservice String Value; } global class OtherWeight{ webservice Decimal Value; } global class CarbonFootprint{ webservice Decimal Value; } global class COSHH{ webservice String Value; } global class RoHS{ webservice String Value; } global class REACH{ webservice String Value; } global class SKU_QtyPerPallet{ webservice String Value; } global class MultiPackGTIN{ webservice String Value; } global class MultiPack { webservice String Value; } global class SinglePackGTIN{ webservice String Value; } global class SinglePack{ webservice String Value; } global class DeviceGTIN{ webservice String Value; } global class DPM{ webservice String Value; } global class ProductionDateFlag{ webservice String Value; } global class GS1_128Flag{ webservice String Value; } global class MultiPackWidth{ webservice String Value; } global class MultiPackHeight{ webservice String Value; } global class MultiPackLength{ webservice String Value; } global class MultiPackWeight{ webservice String Value; } global class VirtualItemFlag{ webservice String Value; } global class ManufacturerSite{ webservice String Value; } //========xinhonglu=======add=====End=============20180827=========== // 非同期を見せかけ、常にreturn void webservice static void MDMITM(MDMITMWebService.ItemMasters ItemMasters) { if (ItemMasters == null) { return; } NFMUtil.Monitoring Monitoring = ItemMasters.Monitoring; if (Monitoring == null) { return; } BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'MDMITM', ItemMasters.ItemMaster); if (String.isBlank(rowData.Log__c) == false) executefuture(rowData.Id); } @future global static void executefuture(String rowData_Id) { execute(rowData_Id); } global static void execute(String rowData_Id) { Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt); BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c,retry_cnt__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id]; MDMITMWebService.isRunning = true; String logstr = rowData.MessageGroupNumber__c + ' start\n'; BatchIF_Log__c iflog = new BatchIF_Log__c(); iflog.Type__c = 'MDMITM'; iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c; iflog.Log__c = logstr; iflog.ErrorLog__c = ''; insert iflog; String rowDataStr = NFMUtil.getRowDataStr(rowData); List itemMasterList = (List) JSON.deserialize(rowDataStr, List.class); if (itemMasterList == null || itemMasterList.size() == 0) { return; } // BatchIF転送表 から、コード変換のMapを作成 Map transferMap = new Map(); List transferList = [select Table__c, Column__c, External_value__c, Internal_value__c from BatchIF_Transfer__c where Dropped_Flag__c = false and Table__c = 'Product2']; for (BatchIF_Transfer__c t : transferList) { transferMap.put(t.Column__c + t.External_value__c, t.Internal_value__c); } Savepoint sp = Database.setSavepoint(); try { Map pickListValuesMap= new Map(); Schema.DescribeFieldResult fieldResult = Product2.ENG__c.getDescribe(); List ple = fieldResult.getPicklistValues(); for( Schema.PicklistEntry pickListVal : ple) { pickListValuesMap.put(pickListVal.getValue(),pickListVal.getLabel()); } // 更新対応配列とMapなどをセット List productCodeList = new List(); List assetModelNoList = new List(); for (MDMITMWebService.ItemMaster ItemMaster : itemMasterList) { for (MDMITMWebService.Record Record : ItemMaster.Record) { if (Record.To != 'OCN') { // TOは必ず OCN continue; } if (Record.MaterialNumber == null || Record.MaterialNumber == '') { // 必須項目がない場合、処理と飛ばす continue; } // vivek start by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) if(Record.CN_String1 != null && !pickListValuesMap.containsKey(Record.CN_String1[0]) && Record.CN_String1[0] != ''){ // 判断传过来的值是否在选项列表Eng区分中存在 continue; } // vivek end by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) productCodeList.add(Record.MaterialNumber); if (Record.ModelForSales != null && Record.ModelForSales != '') { assetModelNoList.add(Record.ModelForSales); } } } List prdList = [select Id, ENG__c, ProductCode, ProductCode_Ext__c, MDM_Name__c, MDM_Model_No__c, Alternative_Products__c, Name, Asset_Model_No__c, IsActive, Repair_Product_Code__c, BSSCategory__c, Family, Category2__c, Category3__c, Category4__c, Category5__c, Serial_Lot_No__c, Durable_Years__c, Brand_Name__c, Qty_Unit__c, Image_Height__c, Image_Width__c, Image_DocumentID__c from Product2 where ProductCode_Ext__c in :productCodeList order by CreatedDate desc]; Map prdsMap = new Map(); for (Product2 prd : prdList) { prdsMap.put(prd.ProductCode_Ext__c, prd); } // SWAG-AVHDLM MDM数据来的时候相同型号的拷贝照片 List prdList2 = [select Id, Asset_Model_No__c, Image_Height__c, Image_Width__c, Image_DocumentID__c from Product2 where Asset_Model_No__c in :assetModelNoList and Image_DocumentID__c != null order by CreatedDate desc]; Map imgMap = new Map(); for (Product2 prd : prdList2) { if (prd.Image_DocumentID__c != null && imgMap.containsKey(prd.Asset_Model_No__c) == false) { imgMap.put(prd.Asset_Model_No__c, prd); } } // 更新対応配列をセット prdList = new List(); Map prdUpdateMap = new Map(); for (MDMITMWebService.ItemMaster ItemMaster : itemMasterList) { for (MDMITMWebService.Record Record : ItemMaster.Record) { if (Record.To != 'OCN') { // TOは必ず OCN logstr += 'Record.To==' + Record.To + ' '; continue; } if (Record.MaterialNumber == null || Record.MaterialNumber == '') { // 必須項目がない場合、処理と飛ばす iflog.ErrorLog__c += 'MaterialNumber is required\n'; continue; } // vivek start by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) if(Record.CN_String1 != null && !pickListValuesMap.containsKey(Record.CN_String1[0]) && Record.CN_String1[0] != ''){ iflog.ErrorLog__c += Record.MaterialNumber+':Eng区分'+Record.CN_String1+'不存在\n'; continue; } // vivek end by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) Product2 prd = prdsMap.get(Record.MaterialNumber); String prdName = null; if (prd == null) { // 新規の場合 LanguageKey が ZH 商品のみ受信 Boolean isZh = false; if (Record.MaterialDescription != null) { for (MDMITMWebService.MaterialDescription MaterialDescription : Record.MaterialDescription) { if (MaterialDescription.LanguageKey == 'ZH') { isZh = true; prdName = MaterialDescription.Description; break; } } } if (isZh == false) { logstr += 'ZH==false '; continue; } prd = new Product2(); // prd.ENG__c = 'ENG'; // SWAG-AVHDLM MDM数据来的时候相同型号的拷贝照片 if (Record.ModelForSales != null && imgMap.containsKey(Record.ModelForSales) == true) { prd.Image_Height__c = imgMap.get(Record.ModelForSales).Image_Height__c; prd.Image_Width__c = imgMap.get(Record.ModelForSales).Image_Width__c; prd.Image_DocumentID__c = imgMap.get(Record.ModelForSales).Image_DocumentID__c; } } else { // 更新の場合 LanguageKey が ZH の名前の更新が受付けする if (Record.MaterialDescription != null) { for (MDMITMWebService.MaterialDescription MaterialDescription : Record.MaterialDescription) { if (MaterialDescription.LanguageKey == 'ZH') { prdName = MaterialDescription.Description; break; } } } } // 項目転送のセット prd.ProductCode = Record.MaterialNumber; prd.IsActive = true; if (prdUpdateMap.get(prd.ProductCode) == null) { prdList.add(prd); prdUpdateMap.put(prd.ProductCode, prd); //logstr += Record.MaterialNumber + ' '; // 価格表のところまとめてlogを出す } else { prd = prdUpdateMap.get(prd.ProductCode); } prd.Manual_Entry__c = false; // 中文名称が転送してきた場合 if (prdName != null) { // デフォルト値 prd.MDM_Name__c = prdName; prd.Alternative_Products__c = ''; prd.MDM_Model_No__c = ''; prd.Name = prdName.trim(); // 型番:代替品::中文名称 のパターン Pattern pt = Pattern.compile('(.*):(.*)::(.*)'); Matcher mc = pt.matcher(prdName); if (mc.matches()) { prd.MDM_Model_No__c = mc.group(1).trim(); prd.Alternative_Products__c = mc.group(2).trim(); prd.Name = (prd.MDM_Model_No__c == '' ? prd.ProductCode : prd.MDM_Model_No__c) + ':' + mc.group(3).trim(); } else { pt = Pattern.compile('(.*):(.*)::(.*)'); mc = pt.matcher(prdName); if (mc.matches()) { prd.MDM_Model_No__c = mc.group(1).trim(); prd.Alternative_Products__c = mc.group(2).trim(); prd.Name = (prd.MDM_Model_No__c == '' ? prd.ProductCode : prd.MDM_Model_No__c) + ':' + mc.group(3).trim(); } } if (mc.matches() == false && ((prd.Name.indexOf(':') >= 0 && prd.Name.indexOf(':') != prd.Name.indexOf('::')) || (prd.Name.indexOf(':') >= 0 && prd.Name.indexOf(':') != prd.Name.indexOf('::')) ) ) { // 型番::中文名称 のパターン pt = Pattern.compile('(.*):(.*)'); mc = pt.matcher(prdName); if (mc.matches()) { prd.MDM_Model_No__c = mc.group(1).trim(); prd.Name = (prd.MDM_Model_No__c == '' ? prd.ProductCode : prd.MDM_Model_No__c) + ':' + mc.group(2).trim(); } else { pt = Pattern.compile('(.*):(.*)'); mc = pt.matcher(prdName); if (mc.matches()) { prd.MDM_Model_No__c = mc.group(1).trim(); prd.Name = (prd.MDM_Model_No__c == '' ? prd.ProductCode : prd.MDM_Model_No__c) + ':' + mc.group(2).trim(); } } } // 上記以外のパターン if (mc.matches() == false) { if (prd.Name.indexOf('::') == 0) { prd.Name = prd.Name.substring(2); } if (prd.Name.indexOf('::') == 0) { prd.Name = prd.Name.substring(2); } prd.Name = prd.ProductCode + ':' + prd.Name.trim(); } } if (Record.ModelForSales != null) { prd.Asset_Model_No__c = Record.ModelForSales; } if (Record.RepairCode != null) { prd.Repair_Product_Code__c = Record.RepairCode; } if (Record.Layer1st != null) { prd.Family = Record.Layer1st; } if (Record.Layer2nd != null) { prd.Category2__c = Record.Layer2nd; } if (Record.Layer3rd != null) { prd.Category3__c = Record.Layer3rd; } if (Record.Layer4th != null) { prd.Category4__c = Record.Layer4th; } if (Record.Layer5th != null) { prd.Category5__c = Record.Layer5th; } if (Record.ProductLotSerialNoTraceability != null && Record.ProductLotSerialNoTraceability.size() > 0 && Record.ProductLotSerialNoTraceability.get(0).Value != null ) { prd.Serial_Lot_No__c = Record.ProductLotSerialNoTraceability.get(0).Value; } if (Record.LifeTime != null) { prd.Durable_Years__c = Record.LifeTime; } if (Record.MCompany != null) { prd.Brand_Name__c = Record.MCompany; } if (Record.BaseUnitOfMeasure != null) { prd.Qty_Unit__c = Record.BaseUnitOfMeasure; } if (Record.BusinessSegmentName != null && Record.BusinessSegmentName.Value != null) { prd.BSSCategory__c = Record.BusinessSegmentName.Value; } // vivek start by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) if(Record.CN_String1 != null){ prd.ENG__c = Record.CN_String1[0]; } // update end by vivek 2019-7-18 使用MDM的备用字段【CN_String1】同步产品主数据的【ENG区分】(ENG__c) //=======xinhonglu=============Start=============20180816=========== //HHOA-B3L8G6[委托]销售:产品主数据接口(MDMITM)修改 if (Record.MaterialClassificationCode != null && Record.MaterialClassificationCode.Value !=null ) { prd.BSS_Code__c = Record.MaterialClassificationCode.Value; } if (Record.QuantityPerSalesPackagingUnit != null ) { if (Record.QuantityPerSalesPackagingUnit.size() > 0 && Record.QuantityPerSalesPackagingUnit.get(0).Value != null //HHOA-BC5A4H LHJ 20190513 Start && Record.QuantityPerSalesPackagingUnit.get(0).Value != '') { prd.Packing_list_manual__c = Integer.valueOf(Record.QuantityPerSalesPackagingUnit.get(0).Value); } else { prd.Packing_list_manual__c = 0; } } //HHOA-BC5A4H LHJ 20190513 End if (Record.EANUPC != null) { for(MDMITMWebService.EANUPC eANUPC: Record.EANUPC){ if(eANUPC.Category == 'G1'){ prd.JANCODE__c = eANUPC.Value; } } } // LHJ 20180927 10.8上线时暂时注释掉 if (Record.CN_SalesPackagingUnit != null) { prd.SalesPackagingUnit_Chinese__c = NFMUtil.getMapValue(transferMap, 'SalesPackagingUnit_Chinese__c', Record.CN_SalesPackagingUnit, iflog); } if (Record.GrossWeight != null) { prd.GrossWeight__c = Decimal.valueOf(Record.GrossWeight); } if (Record.WeightUnit != null) { prd.WeightUnit__c = Record.WeightUnit; } // LHJ 20180927 10.8上线时暂时注释掉 //if (Record.CN_LonerType != null) { // prd.LonerType__c = Record.CN_LonerType; //} //====================End=============20180816=========== } } if (prdList.size() > 0) { upsert prdList; // PricebookEntryにデータがない場合insertする、CNYとUSDのみ List pricebookList = new List(); if (system.Test.isRunningTest()) { pricebookList.add(new Pricebook2(Id = system.Test.getStandardPricebookId(), Name = 'Standard Pricebook')); } else { pricebookList = [Select Id From Pricebook2 where IsStandard = true]; } if (pricebookList.size() == 0) { iflog.ErrorLog__c += 'Can not find SFDC Standard Pricebook\n'; } else { String pricebookId = pricebookList.get(0).Id; List pbeList = [Select Product2Id, CurrencyIsoCode, UnitPrice, Pricebook2Id From PricebookEntry where Product2Id in: prdList and Pricebook2Id = :pricebookId order by Product2Id, CurrencyIsoCode]; List pbeInsertList = new List(); Map rmbMap = new Map(); Map usdMap = new Map(); for (PricebookEntry pbe : pbeList) { if (pbe.CurrencyIsoCode == 'CNY') { rmbMap.put(pbe.Product2Id, pbe); } else if (pbe.CurrencyIsoCode == 'USD') { usdMap.put(pbe.Product2Id, pbe); } } for (Product2 prd : prdList) { logstr += prd.ProductCode; if (rmbMap.get(prd.Id) == null) { PricebookEntry pbe = new PricebookEntry(); pbe.Pricebook2Id = pricebookId; pbe.Product2Id = prd.Id; pbe.CurrencyIsoCode = 'CNY'; pbe.UnitPrice = 0; pbe.IsActive = prd.IsActive; pbeInsertList.add(pbe); logstr += ' add(CNY_0)'; } if (usdMap.get(prd.Id) == null) { PricebookEntry pbe = new PricebookEntry(); pbe.Pricebook2Id = pricebookId; pbe.Product2Id = prd.Id; pbe.CurrencyIsoCode = 'USD'; pbe.UnitPrice = 0; pbe.IsActive = prd.IsActive; pbeInsertList.add(pbe); logstr += ' add(USD_0)'; } logstr += ' '; } if (pbeInsertList.size() > 0) { insert pbeInsertList; } } } logstr += '\nend'; rowData.retry_cnt__c = 0; } catch(Exception ex) { // エラーが発生した場合 Database.rollback(sp); System.debug(Logginglevel.ERROR, 'MDMITM_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage()); System.debug(Logginglevel.ERROR, 'MDMITM_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString()); logstr += '\n' + ex.getMessage(); iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c; if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0; if (rowData.retry_cnt__c < batch_retry_max_cnt){ rowData.retry_cnt__c++; LogAutoSendSchedule.assignOneMinute(); } if (rowData.retry_cnt__c >= batch_retry_max_cnt){ rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c+'错误次数已经超过自动收信设定的最大次数,请手动收信'; } } update rowData; iflog.Log__c = logstr; if (iflog.Log__c.length() > 131072) { iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...'; } if (iflog.ErrorLog__c.length() > 32768) { iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...'; } update iflog; } }