發起審批前,要知道是發起審批的哪一個模板,需要模板的ID,下面是獲取方法:
在設計界面的URL裏面獲取。我是多個模板的ID統一保存到後臺的,所以有一個類
namespace ReviewOrderEntity
{
public class ExaminnationEntity
{
private string _exa001;
private string _exa002;
/// <summary>
/// 審批表單名
/// </summary>
public string EXA001
{
get
{
return _exa001;
}
set
{
_exa001 = value;
}
}
/// <summary>
/// 審批ID
/// </summary>
public string EXA002
{
get
{
return _exa002;
}
set
{
_exa002 = value;
}
}
}
}
發起審批的結果怎樣,需要根據審批結果判斷是否成功
namespace DDHelper
{
public class ApprovalResult
{
/// <summary>
/// 接口開啓或關閉狀態
/// </summary>
public int ding_open_errcode
{
get;
set;
} = 0;
/// <summary>
/// 發送審批消息是否成功
/// </summary>
public bool is_success
{
get;
set;
} = false;
/// <summary>
/// 審批實例id
/// </summary>
public string process_instance_id
{
get;
set;
}
/// <summary>
///
/// </summary>
public string request_id
{
get;
set;
}
}
}
/// <summary>
/// 消息送審,並得到送審的消息
/// </summary>
void getOrderForPara ( string accessToken )
{
try
{
if ( string . IsNullOrEmpty ( AppSetting . corpid ) )
return;
if ( modelExa == null )
return;
//獲取審批人、終審人等
if ( getUserData ( ) == false )
return;
appResult = new List<ApprovalResult> ( );
//headerList 發起審批的表單實體
foreach ( OrderHeaderEntity header in headerList )
{
if ( header . PRO009 != null || header . PRO009 != string . Empty )
{
UserEntity user = userList . Find ( ( k ) =>
{
return k . DBB005 == header . PRO009;
} );
if ( user != null )
{
#region 送審
IDingTalkClient client = new DefaultDingTalkClient ( Urls . get_Examination_and_approval );
SmartworkBpmsProcessinstanceCreateRequest req = new SmartworkBpmsProcessinstanceCreateRequest ( );
//審批ID
req . AgentId = string . IsNullOrEmpty ( AppSetting . Approvers ) == true ? 0 : Convert . ToInt64 ( AppSetting . Approvers );
//審批表單ID
req . ProcessCode = modelExa . EXA002;
//發起人ID
req . OriginatorUserId = user . DBB001;
//發起人所在部門ID
req . DeptId = string . IsNullOrEmpty ( user . DBB003 ) == true ? 0 : Convert . ToInt64 ( user . DBB003 );
//審批人 多人用逗號隔開 按順序審批
req . Approvers = getUserForAppro ( header . PRO001 );
List<SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain> list = new List<SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain> ( );
//審批單頭內容
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj1 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj1 . Name = "ERP單號";
obj1 . Value = header . PRO001;
list . Add ( obj1 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj2 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj2 . Name = "項目名稱";
obj2 . Value = header . PRO002;
list . Add ( obj2 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj3 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj3 . Name = "填表日期";
obj3 . Value = header . PRO003;
list . Add ( obj3 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj4 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj4 . Name = "簽訂單位";
obj4 . Value = header . PRO004;
list . Add ( obj4 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj5 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj5 . Name = "申請人";
obj5 . Value = header . PRO005;
list . Add ( obj5 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj6 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj6 . Name = "備註";
obj6 . Value = header . PRO006;
list . Add ( obj6 );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj7 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj7 . Name = "交貨日期";
obj7 . Value = header . PRO007;
list . Add ( obj7 );
object [ ] obj = new object [ bodyList . FindAll ( ( k ) =>
{
return k . PRP001 == header . PRO001;
} ) . Count ];
int l = 0;
//審批單身內容
foreach ( OrderBodyEntity body in bodyList . FindAll ( ( k ) =>
{
return k . PRP001 == header . PRO001;
} ) )
{
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj9 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj9 . Name = "生產設備名稱";
obj9 . Value = body . PRP003;
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj10 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj10 . Name = "型號";
obj10 . Value = body . PRP004;
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj11 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj11 . Name = "數量";
obj11 . Value = body . PRP005 . ToString ( );
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj12 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj12 . Name = "生產類型";
obj12 . Value = body . PRP006;
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj13 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj13 . Name = "方向";
obj13 . Value = body . PRP007;
obj [ l ] = new object [ ] { obj9 ,obj10 ,obj11 ,obj12 ,obj13 };
l++;
}
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj14 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj14 . Name = "序號:00";
obj14 . Value = FastJSON . JSON . ToJSON ( obj );
list . Add ( obj14 );
req . FormComponentValues_ = list;
SmartworkBpmsProcessinstanceCreateResponse rsp = client . Execute ( req ,accessToken );
ApprovalResult result = XmlUtil . ReadXmlToApprovalResult ( rsp . Body );
result . request_id = header . PRO001;
appResult . Add ( result );
#endregion
}
}
}
}
catch ( Exception ex )
{
Utility . LogHelper . WriteException ( "錯誤:" + ex . StackTrace + "警告:" + ex . Message ,ex );
throw new Exception ( ex . Message );
}
}
注意:裏面
SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain obj1 = new SmartworkBpmsProcessinstanceCreateRequest . FormComponentValueVoDomain ( );
obj1 . Name = "ERP單號";
obj1 . Value = header . PRO001;
list . Add ( obj1 );
中的obj1 . Name = "ERP單號"; 就是你設計表單的欄位名子
obj1 . Value = header . PRO001;是具體的值
到此處,釘釘送審就算完成了。後面就是根據回調函數,獲取審批結果,會寫數據庫單據狀態。由於本人學識有限,回調一直調試不通,所以通過循環獲取單據狀態的辦法完成此步驟,此處就不寫了,如果有詳細的說明博客,幫忙推薦,謝謝。