从合同模板获取合同 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 个选项是:
为 CONTRACT 分段键启用自动编号
修改CreateActivateContract方法,为contract.ContactID分配唯一标识符:
Contract contract =(Contract)contractMaint.Contracts.Cache.CreateInstance();
contract.ContactID = "SOMEKEY";
contract = contractMaint.Contracts.Insert(contract);
我试图在创建销售订单后下达发票时设置和激活合同。
但是每次我尝试发布时,我都会收到这个错误。
留言内容如下:
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 个选项是:
为 CONTRACT 分段键启用自动编号
修改CreateActivateContract方法,为contract.ContactID分配唯一标识符:
Contract contract =(Contract)contractMaint.Contracts.Cache.CreateInstance(); contract.ContactID = "SOMEKEY"; contract = contractMaint.Contracts.Insert(contract);