Невозможно выполнить операцию глубокой вставки для API API API_PRODUCT_SRV, включенного в белый список, с использованием S / 4 Hana Cloud SDK - PullRequest
0 голосов
/ 08 марта 2019

Я завершил операции чтения и обновления на API_PRODUCT_SRV Сервис.

Теперь, когда я выполняю глубокую вставку в API_PRODUCT_SRV (Product Entity, у которого много ассоциаций), я получаю следующую ошибку.

“errordetails”: [

{
“code”: “API_PRD_MSG/004”,
“message”: “Provide atleast one description for the product.”,
“propertyref”: “”,
“severity”: “error”,
“target”: “”
}
]

Я нашел этот блог о глубоком погружении

https://blogs.sap.com/2017/12/07/step-20-with-s4hana-cloud-sdk-create-and-deep-insert-with-the-virtual-data-model-for-odata/comment-page-1/#comment-453020

, который объясняет глубокую вставку с использованием сервлетов. (Т. Е. Используя HttpServletReq), которая обеспечивает службу остальных.

Но я использую класс CreateRequest из модели облачного программирования приложений SAP, который генерирует службу данных, поэтому я не могу использовать аналогичный код, представленный в блоге.

Я добавил код и полезную информацию для вашего прочтения.

Создать код операции

@Create(serviceName = "ProductService", entity = "Products")
    public CreateResponse create(CreateRequest req) throws ODataException {
        Product toCreate = new ModelMapper().map(req.getMapData(), Product.class);          
        Product created = new DefaultProductMasterService().createProduct(toCreate)
                .execute(new ErpConfigContext("K4XS4SDKDest"));
        return CreateResponse.setSuccess().setData(created).response();
    }

Используемая полезная нагрузка:

{
  "Product" : "BALL",
    "ProductType" : "ZHLB",
    "CrossPlantStatus" : "",
    "CrossPlantStatusValidityDate" : null,
    "CreationDate" : "\/Date(1499731200000)\/",
    "CreatedByUser" : "11279380",
    "LastChangeDate" : "\/Date(1550448000000)\/",
    "LastChangedByUser" : "HWV87616",
    "IsMarkedForDeletion" : false,
    "ProductOldID" : "",
    "GrossWeight" : "0.000",
    "PurchaseOrderQuantityUnit" : "",
    "SourceOfSupply" : "",
    "WeightUnit" : "KG",
    "NetWeight" : "0.000",
    "CountryOfOrigin" : "",
    "CompetitorID" : "",
    "ProductGroup" : "01",
    "BaseUnit" : "EA",
    "ItemCategoryGroup" : "",
    "ProductHierarchy" : "",
    "Division" : "",
    "VarblPurOrdUnitIsActive" : "",
    "VolumeUnit" : "",
    "MaterialVolume" : "0.000",
    "ANPCode" : "0",
    "Brand" : "",
    "ProcurementRule" : "",
    "ValidityStartDate" : null,
    "LowLevelCode" : "",
    "ProdNoInGenProdInPrepackProd" : "",
    "SerialIdentifierAssgmtProfile" : "",
    "SizeOrDimensionText" : "",
    "IndustryStandardName" : "",
    "ProductStandardID" : "",
    "InternationalArticleNumberCat" : "",
    "ProductIsConfigurable" : false,
    "IsBatchManagementRequired" : false,
    "ExternalProductGroup" : "",
    "CrossPlantConfigurableProduct" : "",
    "SerialNoExplicitnessLevel" : "",   
    "ManufacturerPartProfile" : "",
    "ChangeNumber" : "",
    "MaterialRevisionLevel" : "",
    "HandlingIndicator" : "",
    "WarehouseProductGroup" : "",
    "WarehouseStorageCondition" : "",
    "StandardHandlingUnitType" : "",
    "SerialNumberProfile" : "",
    "AdjustmentProfile" : "",
    "PreferredUnitOfMeasure" : "",
    "IsPilferable" : false,
    "IsRelevantForHzdsSubstances" : false,
    "QuarantinePeriod" : "0",
    "TimeUnitForQuarantinePeriod" : "",
    "QualityInspectionGroup" : "",
    "AuthorizationGroup" : "",
    "HandlingUnitType" : "",
    "HasVariableTareWeight" : false,
    "MaximumPackagingLength" : "0.000",
    "MaximumPackagingWidth" : "0.000",
    "MaximumPackagingHeight" : "0.000",
  "to_Description": {
    "results": [
     {
        "Product" : "BALL",
        "Language" : "EN",
        "ProductDescription" : "Pipes for machines"
      }
    ]
  }
}

Не могли бы вы помочь мне, как мне изменить мой код, чтобы обеспечить глубокую вставку с помощью SAP S / 4HANA Cloud SDK при использовании модели программирования приложений SAP Cloud (CreateRequest класс)?

Файл журнала:

Product(super=VdmObject(customFields={}, changedOriginalFields={LowLevelCode=null, ProductGroup=null, SizeOrDimensionText=null, CreatedByUser=null, CountryOfOrigin=null, Product=null, ProductStandardID=null, IsPilferable=null, VolumeUnit=null, WarehouseProductGroup=null, WarehouseStorageCondition=null, MaterialVolume=null, ManufacturerPartProfile=null, CrossPlantStatus=null, TimeUnitForQuarantinePeriod=null, GrossWeight=null, InternationalArticleNumberCat=null, SourceOfSupply=null, ProductType=null, ItemCategoryGroup=null, ProcurementRule=null, BaseUnit=null, ProductOldID=null, VarblPurOrdUnitIsActive=null, LastChangedByUser=null, Brand=null, MaximumPackagingWidth=null, QuarantinePeriod=null, PurchaseOrderQuantityUnit=null, ProductHierarchy=null, AuthorizationGroup=null, StandardHandlingUnitType=null, MaterialRevisionLevel=null, ExternalProductGroup=null, CrossPlantConfigurableProduct=null, MaximumPackagingLength=null, HasVariableTareWeight=null, ANPCode=null, ProdNoInGenProdInPrepackProd=null, WeightUnit=null, IsMarkedForDeletion=null, CompetitorID=null, QualityInspectionGroup=null, IsBatchManagementRequired=null, IsRelevantForHzdsSubstances=null, Division=null, SerialIdentifierAssgmtProfile=null, AdjustmentProfile=null, PreferredUnitOfMeasure=null, SerialNoExplicitnessLevel=null, HandlingIndicator=null, HandlingUnitType=null, NetWeight=null, ProductIsConfigurable=null, IndustryStandardName=null, SerialNumberProfile=null, ChangeNumber=null, MaximumPackagingHeight=null}), product=BELL, productType=ZHLB, crossPlantStatus=, crossPlantStatusValidityDate=null, creationDate=null, createdByUser=11279380, lastChangeDate=null, lastChangedByUser=HWV87616, lastChangeDateTime=null, isMarkedForDeletion=false, productOldID=, grossWeight=0.000, purchaseOrderQuantityUnit=, sourceOfSupply=, weightUnit=KG, netWeight=0.000, countryOfOrigin=, competitorID=, productGroup=01, baseUnit=EA, itemCategoryGroup=, productHierarchy=, division=, varblPurOrdUnitIsActive=, volumeUnit=, materialVolume=0.000, aNPCode=0, brand=, procurementRule=, validityStartDate=null, lowLevelCode=, prodNoInGenProdInPrepackProd=, serialIdentifierAssgmtProfile=, sizeOrDimensionText=, industryStandardName=, productStandardID=, internationalArticleNumberCat=, productIsConfigurable=false, isBatchManagementRequired=false, externalProductGroup=, crossPlantConfigurableProduct=, serialNoExplicitnessLevel=, productManufacturerNumber=null, manufacturerNumber=null, manufacturerPartProfile=, changeNumber=, materialRevisionLevel=, handlingIndicator=, warehouseProductGroup=, warehouseStorageCondition=, standardHandlingUnitType=, serialNumberProfile=, adjustmentProfile=, preferredUnitOfMeasure=, isPilferable=false, isRelevantForHzdsSubstances=false, quarantinePeriod=0, timeUnitForQuarantinePeriod=, qualityInspectionGroup=, authorizationGroup=, handlingUnitType=, hasVariableTareWeight=false, maximumPackagingLength=0.000, maximumPackagingWidth=0.000, maximumPackagingHeight=0.000, erpConfigContext=null, toDescription=null, toPlant=null, toProductBasicText=null, toProductInspectionText=null, toProductProcurement=null, toProductPurchaseText=null, toProductQualityMgmt=null, toProductSales=null, toProductSalesTax=null, toProductStorage=null, toProductUnitsOfMeasure=null, toSalesDelivery=null)
{ "written_at":"2019-03-11T03:56:27.923Z","written_ts":918343802814688,"component_id":"e8c99eff-1a4e-4266-ba2a-fc099399100c","component_name":"FNpy7mXtvln0dnT1-FinalTestApp-srv","DCComponent":"","organization_name":"-","component_type":"application","space_name":"dev","component_instance":"0","organization_id":"-","correlation_id":"-","CSNComponent":"","space_id":"a78252bf-72bf-479c-b761-8260de0c776e","Application":"FNpy7mXtvln0dnT1-FinalTestApp-srv","container_id":"10.0.138.113","type":"log","logger":"com.sap.cloud.sdk.service.prov.api.util.ProcessorHelper","thread":"http-nio-0.0.0.0-3000-exec-7","level":"ERROR","categories":[],"msg":"The endpoint responded with HTTP error code 400.\nProvide atleast one description for the product.\nFull error message: \n{\n  \"error\": {\n    \"code\": \"API_PRD_MSG/004\",\n    \"message\": {\n      \"lang\": \"en\",\n      \"value\": \"Provide atleast one description for the product.\"\n    },\n    \"innererror\": {\n      \"application\": {\n        \"component_id\": \"LO-MD-MM\",\n        \"service_namespace\": \"/SAP/\",\n        \"service_id\": \"API_PRODUCT_SRV\",\n        \"service_version\": \"0001\"\n      },\n      \"transactionid\": \"C16DD240C7520010E005C7E648BC12F5\",\n      \"timestamp\": \"20190311035627.5989630\",\n      \"Error_Resolution\": {\n        \"SAP_Transaction\": \"For backend administrators: run transaction /IWFND/ERROR_LOG on SAP Gateway hub system and search for entries with the timestamp above for more details\",\n        \"SAP_Note\": \"See SAP Note 1797736 for error analysis (https://service.sap.com/sap/support/notes/1797736)\"\n      },\n      \"errordetails\": [\n        {\n          \"code\": \"API_PRD_MSG/004\",\n          \"message\": \"Provide atleast one description for the product.\",\n          \"propertyref\": \"\",\n          \"severity\": \"error\",\n          \"target\": \"\"\n        }\n      ]\n    }\n  }\n}","stacktrace":["java.lang.reflect.InvocationTargetException","\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)","\tat 

мой-service.cds

    using API_PRODUCT_SRV  from '../srv/external/csn/API_PRODUCT_SRV.json';
    service ProductService {

      entity Products as Projection on API_PRODUCT_SRV.A_ProductType {
       key Product,
       ProductType,
       CreationDate,
       CrossPlantStatus,
       CrossPlantStatusValidityDate,
        CreatedByUser,
        LastChangeDate,
        LastChangedByUser,
        IsMarkedForDeletion,
        ProductOldID,
        GrossWeight,
        PurchaseOrderQuantityUnit,
        SourceOfSupply,
        WeightUnit,
        NetWeight,
        CountryOfOrigin,
        CompetitorID,
        ProductGroup,
        BaseUnit,
        ItemCategoryGroup,
        ProductHierarchy,
        Division,
        VarblPurOrdUnitIsActive,
        VolumeUnit,
        MaterialVolume,
        ANPCode,
        Brand,
        ProcurementRule,
        ValidityStartDate,
        LowLevelCode,
        ProdNoInGenProdInPrepackProd,
        SerialIdentifierAssgmtProfile,
        SizeOrDimensionText,
        IndustryStandardName,
        ProductStandardID,
        InternationalArticleNumberCat,
        ProductIsConfigurable,
        IsBatchManagementRequired,
        ExternalProductGroup,
        CrossPlantConfigurableProduct,
        SerialNoExplicitnessLevel,
        ProductManufacturerNumber,
        ManufacturerPartProfile,
        ChangeNumber,
        MaterialRevisionLevel,
        HandlingIndicator,
        WarehouseProductGroup,
        WarehouseStorageCondition,
        StandardHandlingUnitType,
        SerialNumberProfile,
        AdjustmentProfile,
        PreferredUnitOfMeasure,
       IsPilferable,
        IsRelevantForHzdsSubstances,
        QuarantinePeriod,
        TimeUnitForQuarantinePeriod,
        QualityInspectionGroup,
        AuthorizationGroup,
        HandlingUnitType,
        HasVariableTareWeight,
        MaximumPackagingLength,
        MaximumPackagingWidth,
        MaximumPackagingHeight,
      to_Description
      }
 entity A_ProductDescriptionType as Projection on API_PRODUCT_SRV.A_ProductDescriptionType
  {
              key  Product,
             key   Language,
                ProductDescription
}
}

Можете ли вы рассказать, как добавить в него ассоциации? мой-service.cds

using API_BUSINESS_PARTNER as bp from './external/csn/API_BUSINESS_PARTNER';

service CrudService{

 @cds.persistence.skip
 Entity BusinessPartner as projection on bp.A_BusinessPartnerType{
   BusinessPartner,
   LastName,
   FirstName,
   BusinessPartnerCategory
  };
}

С уважением,

Минакши

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Проблема в том, что ваш JSON запрос полезная нагрузка:

{
  "Product" : "BALL",
  ...
  "to_Description": {
    "results": [
     {
        "Product" : "BALL",
        "Language" : "EN",
        "ProductDescription" : "Pipes for machines"
      }
    ]
  }
}

to_Description не ожидается, что объект . Вместо этого это должен быть массив :

{
  "Product" : "BALL",
  ...
  "to_Description": [
     {
        "Product" : "BALL",
        "Language" : "EN",
        "ProductDescription" : "Pipes for machines"
     }
  ]
}
0 голосов
/ 19 марта 2019

Можете ли вы поделиться своим проектом, если это возможно. Карта запроса может не содержать данных описания продукта, так как я предполагаю, что связь между продуктом и описанием не определена должным образом в файле CDS.

Пожалуйста, проверьте следующую документацию, чтобы определить свои организации и ассоциации:

https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/855e00bd559742a3b8276fbed4af1008.html

Мне интересно знать, каков в настоящее время ответ на метаданные $ для вашего сервиса. Кроме того, я хотел бы увидеть ваш собственный код обработчика и узнать, как вы пытаетесь получить полезную нагрузку глубокой вставки из объекта запроса.

Спасибо, Kranti

...