0

所以我们有一个数据结构“案例”,例如退货案例、退款案例等。其中一个字段是“案例评论”字段。该字段(在 C# wsdl 生成的代码中)是一个 QueryResult 字段。

我知道要查询 CaseComments 我可以使用:

SELECT (SELECT ParentId, CommentBody FROM Case.CaseComments) FROM Case

获取所有案例评论的 ParentId 和 CommentBody 字段。然而,这是我没有得到的插入,或者找到任何关于如何做的合理文档。

我更喜欢使用强类型查询,例如:

    Case updateCase = new Case();
    updateCase.Id = caseToAddToID;
    updateCase.CaseComments = new QueryResult();
    updateCase.CaseComments.records = (sObject[])new CaseComment[1];
    updateCase.CaseComments.records[0] = new CaseComment();
    ((CaseComment)updateCase.CaseComments.records[0]).ParentId = caseToAddToID;
    ((CaseComment)updateCase.CaseComments.records[0]).CommentBody = noteToAdd;

    binding.update(new sObject[]{updateCase});

但是当做这样的事情时,我得到一个错误:

    Error: getting record type info.
    INVALID_FIELD: No such column 'CaseComments' on entity 'Case'. 
    If you are attempting to use a custom field, be sure to append 
    the '__c' after the custom field name. Please reference your WSDL
    or the describe call for the appropriate names.

但是,如果我尝试仅在 caseComment 数据结构上使用 create(),它会毫无错误地插入,但不会与 Case 适当关联,而且我似乎找不到它们。

4

1 回答 1

1

对您的工作感到惊讶,您可能想要检查新案例评论是否实际保存。在 APEX 中,如果您尝试写入子关系字段(即updateCase.CaseComents.records = (sObject[]) new CaseComment[1];),则会出现异常,尽管您可以将记录添加到数组中,即使它们不会被更新。

例如,这会引发错误

 Case updateCase = new Case();
 updateCase.caseComments = new List<CaseComment>(); // throws compile error in APEX

您可以这样做,但不会保存新的案例评论。

 Case updateCase = [select (select id from CaseComments) from Case where id = '1234'];
 updateCase.caseComments.add(new CaseComment(commentBody = 'comment));
 binding.update(new sObject[]{ updateCase });

正确的方法是在单独的 DML 语句中创建它们

 CaseComment newComment = new CaseComment();
 newComment.parentId = caseToAddToId;
 newComment.commentBody = noteToAdd;
 binding.update(new sObject[] { newComment });
于 2012-06-20T04:30:20.200 回答