首页 > 解决方案 > 如何使用 post rest call 将大型 pdf 文件附加到 crm 动态电子邮件?

问题描述

只有当我的文件内容少于 100 个字符时,我才能成功发出电子邮件附件的发布请求。对于相同的代码,当我发布像 1Mb 这样的大文件内容时,我得到一个动态错误

public enum Payload {
        PAGING_COOKIE("@Microsoft.Dynamics.CRM.fetchxmlpagingcookie"),
        CONTEXT("@odata.contex"),
        ETAG("@odata.etag"),
        ID("@odata.id"),
        BIND("@odata.bind"),
        VALUE("value"),
        COUNT("@odata.count"),
        NEXT_LINK("@odata.nextLink"),
        NAVIGATION("_"),
        ERROR("error"),
        MESSAGE("message"),
        INNER_ERROR("innererror"),
        CODE("code"),
        TYPE("type"),
        STACK_TRACE("stacktrace");
        ....
}

@Stateless
public class ActivityMimeAttachmentRepository extends DynamicsRepository {

    // Select
    private static final String SELECT_GUID = "$select=" + ActivityMimeAttachmentBean.CrmFields.activitymimeattachmentid.name();

    @Inject
    private ActivityMimeAttachmentBuilder activityMimeAttachmentBuilder;


    public void createAttachement(ActivityMimeAttachmentBean attachment) throws DynamicsException {

        String url = activityMimeAttachmentBuilder.url(ActivityMimeAttachmentBean.RESOURCE_NAME, null, null, true);

        // Construction des propriétés à créer
        ArrayList<ActivityMimeAttachmentBean.CrmFields> crmFields = new ArrayList<ActivityMimeAttachmentBean.CrmFields>();

        crmFields.add(ActivityMimeAttachmentBean.CrmFields.filename);
        crmFields.add(ActivityMimeAttachmentBean.CrmFields.mimetype);
        crmFields.add(ActivityMimeAttachmentBean.CrmFields.body);
        crmFields.add(ActivityMimeAttachmentBean.CrmFields.subject);
        crmFields.add(ActivityMimeAttachmentBean.CrmFields.objectid);
        crmFields.add(ActivityMimeAttachmentBean.CrmFields.objecttypecode);

        // Construction du payload
        String payload = activityMimeAttachmentBuilder.build(false, attachment, crmFields.toArray(new ActivityMimeAttachmentBean.CrmFields[0])).toString();

        // Création dans Dynamics CRM
        super.create(url, payload, Header.RETURN_REPRESENTATION);
    }
}

public JSONObject create(String url, String payload, Header...headers) throws DynamicsException {
        WebClient webClient = build(url, false, authenticationService.getToken(false), null, headers);
        Response response = webClient.post(payload);

        if (401 == response.getStatus()) {
            webClient = build(url, false, authenticationService.getToken(true), null, headers);
            response = webClient.post(payload);
        }

        JSONObject entity = build(webClient, "POST", payload, response);
        return entity;
    }

我得到的错误是:引起:java.lang.Throwable:消息:对象引用未设置为对象的实例。,类型:System.NullReferenceException,stacktrace:在Microsoft.Crm.Extensibility.OData.EdmTypeConverte r。 ConvertToCrmEntity(EdmEntityObject edmEntity, EntityReference entityReference, IEdmModel edmModel) 在 Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute[TResult](ILogger 记录器, EventId eventId, ActivityType activityType, Func 1 func, IEnumerable1 additionalCustomProperties) 在 Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute[TResult] ](ILogger 记录器,XrmTelemetryActivityType activityType,Func 1 func) at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.CreateEdmEntity(CrmODataExecutionContext context, String edmEntityName, EdmEntityObject entityObject, Boolean isUpsert) at Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySetImplementation(String& entitySetName, EdmEntityObject entityObject) at Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute[TResult](ILogger logger, EventId eventId, ActivityType activityType, Func1 func,IEnumerable 1 additionalCustomProperties) at Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute[TResult](ILogger logger, XrmTelemetryActivityType activityType, Func1 func)在 lambda_method(闭包,对象,对象 [])

当我将正文内容减少到少于 100 个字符时,我没有收到此错误,并且文件已附加到电子邮件中。

标签: javarestpostdynamics-crmemail-attachments

解决方案


推荐阅读