从合同模板获取合同 ID 时出错

Error in getting Contract ID from Contract template

我试图在创建销售订单后下达发票时设置和激活合同。

但是每次我尝试发布时,我都会收到这个错误。

留言内容如下:

Inserting 'Contract' record raised at least one error. Please review the errors. Error: 'Contract ID' cannot be empty.

但在此之前我已经制作了合同模板和使用合同模板的客户合同。

这是引发此错误的代码。

private Contract CreateActivateContract(ContractMaint contractMaint, DateTime? invoiceDate, int? customerID, int? customerLocationID, string simCardID, string phoneNumber, CTBillEngine engine)
    {
      contractMaint.Clear();
      //initialize new contract
      Contract contract = (Contract)contractMaint.Contracts.Cache.CreateInstance();
      contract = contractMaint.Contracts.Insert(contract);

      //look up contract template id
      Contract template = PXSelect<Contract,
                          Where<Contract.isTemplate, Equal<boolTrue>,
                          And<Contract.contractCD, Equal<Required<Contract.contractCD>>>>>
                          .Select(Base, "SIMCARD");
      if(template==null)
      {
         throw new PXException("The SIMCARD contract template was not found."); 
      }

      contract.TemplateID = template.ContractID;
      contract.CustomerID = customerID;
      contract = contractMaint.Contracts.Update(contract);
      contract.LocationID = customerLocationID;
      contract.StartDate = invoiceDate;
      contract.ActivationDate = invoiceDate;
      contract = contractMaint.Contracts.Update(contract);

      //store simcardid and phone number into the contract attributes
      foreach(CSAnswers attribute in contractMaint.Answers.Select())
      {
        switch(attribute.AttributeID)
        {
          case "SIMCARDID":
            attribute.Value = simCardID;
            contractMaint.Answers.Update(attribute);
            break;
          case "PHONENUM":
            attribute.Value = phoneNumber;
            contractMaint.Answers.Update(attribute);
            break;
        }
      }
      //save the generated contract
      contractMaint.Save.Press();
      //setup and actiave the contract
      engine.SetupAndActivate(contract.ContractID, contract.ActivationDate);
      return contract;

    }  

下面是合同模板和客户合同屏幕的屏幕截图。

很可能您在 CONTRACT 分段键上禁用了自动编号:

如果是这样,您的 2 个选项是:

  1. 为 CONTRACT 分段键启用自动编号

  2. 修改CreateActivateContract方法,为contract.ContactID分配唯一标识符:

    Contract contract =(Contract)contractMaint.Contracts.Cache.CreateInstance();
    contract.ContactID = "SOMEKEY";
    contract = contractMaint.Contracts.Insert(contract);