Send_Error呼叫 (函式名稱 cmserr) 會通知夥伴程式本機程式發生應用層級錯誤。
語法
CM_ENTRY Send_Error(
unsigned char FAR *conversation_ID,
CM_INT32 FAR *request_to_send_received,
CM_INT32 FAR *return_code
);
參數
conversation_ID
提供的參數。 指定交談的標識碼。 此參數的值是由 Initialize_Conversation 或 Accept_Conversation 所傳回。
request_to_send_received
傳回的參數。 指定要求到傳送接收的指標。 可能的值為:
CM_REQ_TO_SEND_RECEIVED
合作夥伴計劃發出 Request_To_Send,要求本機程式將交談變更為 RECEIVE 狀態。
CM_REQ_TO_SEND_NOT_RECEIVED
合作夥伴計劃未發出 Request_To_Send。 如果return_code設定為 CM_PROGRAM_PARAMETER_CHECK 或 CM_STATE_CHECK,則此值不相關。
return_code
從這個呼叫傳回的程序代碼。 本主題稍後會列出有效的傳回碼。
回傳代碼
return_code的值會根據發出呼叫時的交談狀態而有所不同。
SEND 狀態
如果程序發出具有 SEND 狀態交談的呼叫,則可能會有下列傳回碼:
CM_OK
主要傳回碼;已成功執行的呼叫。
CM_OPERATION_NOT_ACCEPTED
主要傳回碼;此交談的上一個作業不完整。
CM_OPERATION_INCOMPLETE
主要傳回碼;作業尚未完成(處理模式僅限非封鎖),仍在進行中。 程式可以發出 Wait_For_Conversation 等候作業完成,或 Cancel_Conversation 取消作業和交談。 如果已呼叫 Specify_Windows_Handle ,應用程式應該等候Microsoft® Windows® 訊息的通知,而不是呼叫 Wait_For_Conversation。
CM_PRODUCT_SPECIFIC_ERROR
主要傳回碼;發生產品特定的錯誤,且已在產品錯誤記錄檔中記錄。
CM_CONVERSATION_TYPE_MISMATCH
主要傳回碼;夥伴邏輯單元 (LU) 或程式不支援配置要求中指定的交談類型(基本或對應)。
CM_PIP_NOT_SPECIFIED_CORRECTLY
主要傳回碼;配置要求遭到非CPI-C LU 6.2 交易程式 (TP) 拒絕。 合作夥伴計劃需要一或多個 PIP 資料變數,而 CPI-C 不支援這些變數。
CM_SECURITY_NOT_VALID
主要傳回碼;合作夥伴 LU 不接受配置要求中指定的使用者識別碼或密碼。
CM_SYNC LEVEL_NOT_SUPPORTED_PGM
主要傳回碼;合作夥伴計劃不支援配置要求中指定的同步處理層級。
CM_TPN_NOT_RECOGNIZED
主要傳回碼;夥伴 LU 無法辨識配置要求中指定的程式名稱。
CM_TP_NOT_AVAILABLE_NO_RETRY
主要傳回碼;夥伴 LU 無法啟動配置要求中指定的程式,因為有永久條件。 錯誤的原因可能會記錄在遠端節點上。 在更正錯誤之前,請勿重試配置。
CM_TP_NOT_AVAILABLE_RETRY
主要傳回碼;夥伴 LU 無法啟動配置要求中指定的程式,因為暫時性條件。 錯誤的原因可能會記錄在遠端節點上。 重試配置。
CM_PROGRAM_ERROR_PURGING
主要傳回碼;發生下列其中一項:
處於 RECEIVE 或 CONFIRM 狀態時,合作夥伴計畫會發出 Send_Error。 已清除已傳送但尚未接收的數據。
雖然處於SEND_PENDING狀態,且錯誤方向設定為 CM_RECEIVE_ERROR,但合作夥伴計劃會發出 Send_Error。 數據未清除。
CM_RESOURCE_FAILURE_NO_RETRY
主要傳回碼;發生下列其中一項:交談因為永久狀況而過早終止。 在更正錯誤之前,請勿重試。
合作夥伴計劃未在正常終止之前解除分配交談。
CM_RESOURCE_FAILURE_RETRY
主要傳回碼;交談因暫時性狀況而過早終止,例如數據機失敗。 重試交談。CM_DEALLOCATED_ABEND
主要傳回碼;交談已解除分配,原因如下:遠端程式會發出 Deallocate ,並將類型參數集設為 CM_DEALLOCATE_ABEND,或遠端 LU 因為遠端程式異常結束狀況而這麼做。 如果遠端程式的交談在發出呼叫時處於 RECEIVE 狀態,則會清除本機程式所傳送且尚未由遠端程式接收的資訊。
遠端 TP 已正常終止,但在終止之前未解除分配交談。 遠端 LU 上的節點服務會代表遠端 TP 解除分配交談。
CM_DEALLOCATED_ABEND_SVC
主要傳回碼;交談已解除分配,原因如下:合作夥伴計劃發出 Deallocate ,並將 type 參數設定為 ABEND_SVC。
合作夥伴計劃未在終止之前解除分配交談。
如果此呼叫是由本機程式發出時,夥伴計劃的交談處於 RECEIVE 狀態,則會清除由本機程式傳送且尚未由合作夥伴計劃接收的數據。
CM_DEALLOCATED_ABEND_TIMER
主要傳回碼;交談已解除分配,因為合作夥伴計劃已發出 Deallocate ,並將 type 參數設定為 ABEND_TIMER。 如果此呼叫是由本機程式發出時,夥伴計劃的交談處於 RECEIVE 狀態,則會清除由本機程式傳送且尚未由合作夥伴計劃接收的數據。CM_SVC_ERROR_PURGING
主要傳回碼;處於 SEND 狀態時,合作夥伴計畫或合作夥伴 LU 會發出 Send_Error ,並將 type 參數設定為 SVC。 傳送給合作夥伴計劃的數據可能已經清除。RECEIVE 狀態
如果呼叫是以 RECEIVE 狀態發出,則可能會有下列傳回碼:
CM_OK
主要傳回碼;因為當接收狀態發出 Send_Error 呼叫時,會清除傳入資訊,所以會產生CM_OK,而不是下列專案:CM_PROGRAM_ERROR_NO_TRUNC
CM_PROGRAM_ERROR_PURGING
CM_SVC_ERROR_NO_TRUNC
CM_SVC_ERROR_PURGING
CM_PROGRAM_ERROR_TRUNC
CM_SVC_ERROR_TRUNC (僅限基本對話)
CM_PRODUCT_SPECIFIC_ERROR
CM_RESOURCE_FAILURE_NO_RETRY
CM_RESOURCE_FAILURE_RETRY
如需這些傳回碼的說明,請參閱 CPI-C 一般傳回碼。
CM_DEALLOCATED_NORMAL
主要傳回碼;因為當接收狀態發出 Send_Error 時,會清除傳入資訊,所以會產生CM_DEALLOCATED_NORMAL,而不是下列專案:CM_CONVERSATION_TYPE_MISMATCH
CM_PIP_NOT_SPECIFIED_CORRECTLY
CM_SECURITY_NOT_VALID
CM_SYNC_LEVEL_NOT_SUPPORTED_PGM
CM_TPN_NOT_RECOGNIZED
CM_TP_NOT_AVAILABLE_NO_RETRY
CM_TP_NOT_AVAILABLE_RETRY
CM_DEALLOCATED_ABEND
CM_DEALLOCATED_ABEND_SVC
CM_DEALLOCATED_ABEND_TIMER
SEND_PENDING狀態
如果呼叫是以SEND_PENDING狀態發出,則可能會有下列傳回碼:
CM_OK (主要傳回碼;呼叫已成功執行。)
CM_PRODUCT_SPECIFIC_ERROR
CM_PROGRAM_ERROR_PURGING
CM_RESOURCE_FAILURE_NO_RETRY
CM_RESOURCE_FAILURE_RETRY
CM_DEALLOCATED_ABEND
CM_DEALLOCATED_ABEND_SVC
CM_DEALLOCATED_ABEND_TIMER
CM_SVC_ERROR_PURGING
如需這些傳回碼的說明,請參閱 CPI-C 一般傳回碼。
CONFIRM、CONFIRM_SEND 或 CONFIRM_DEALLOCATE State
如果呼叫是以 CONFIRM、CONFIRM_SEND 或CONFIRM_DEALLOCATE狀態發出,則可能會有下列傳回碼:
CM_OK (主要傳回碼;呼叫已成功執行。)
CM_PRODUCT_SPECIFIC_ERROR
CM_RESOURCE_FAILURE_NO_RETRY
CM_RESOURCE_FAILURE_RETRY
如需這些傳回碼的說明,請參閱 CPI-C 一般傳回碼。
其他州
以 RESET 或 INITIALIZE 狀態的交談發出 Send_Error 是非法的。 以下是可能的傳回碼:
CM_PROGRAM_PARAMETER_CHECK
主要傳回碼; conversation_ID 指定的值無效。CM_PROGRAM_STATE_CHECK
主要傳回碼;交談狀態不是 SEND、RECEIVE、CONFIRM、CONFIRM_SEND、CONFIRM_DEALLOCATE 或 SEND_PENDING。狀態變更
交談可以是 INITIALIZE 或 RESET 以外的任何狀態。
下表摘要說明的狀態變更是以 return_code 參數的值為基礎。
| return_code | 新狀態 |
|---|---|
| CM_OK | 發送 |
| CM_CONVERSATION_TYPE_MISMATCH | 重置 |
| CM_PIP_NOT_SPECIFIED_CORRECTLY | 重置 |
| CM_SECURITY_NOT_VALID | 重置 |
| CM_SYNC_LEVEL_NOT_SUPPORTED_PGM | 重置 |
| CM_TPN_NOT_RECOGNIZED | 重置 |
| CM_TP_NOT_AVAILABLE_NO_RETRY | 重置 |
| CM_TP_NOT_AVAILABLE_RETRY | 重置 |
| CM_RESOURCE_FAILURE_RETRY | 重置 |
| CM_RESOURCE_FAILURE_NO_RETRY | 重置 |
| CM_DEALLOCATED_ABEND | 重置 |
| CM_DEALLOCATED_ABEND_PROG | 重置 |
| CM_DEALLOCATED_ABEND_SVC | 重置 |
| CM_DEALLOCATED_ABEND_TIMER | 重置 |
| CM_DEALLOCATED_NORMAL | 重置 |
| CM_PROGRAM_ERROR_PURGING | 收到 |
| CM_SVC_ERROR_PURGING | 收到 |
| 所有其他 | 沒有變化 |
成功執行此呼叫時,對話會處於本機程式的 SEND 狀態,且處於合作夥伴計劃的 RECEIVE 狀態。
在基本交談中,本機程式可以使用 Set_Log_Data 來指定將錯誤記錄檔數據傳送至夥伴 LU,並新增至本機錯誤記錄檔。 如果交談記錄數據長度特性大於零,LU 會將數據格式化,並將它儲存在傳送緩衝區中。
完成Send_Error之後,記錄數據長度會設定為零,並將記錄數據設為 null。
如果對話在程式發出 Send_Error時處於 RECEIVE 狀態,則 CPI-C 會清除傳入數據。 此資料包含:
Send_Data傳送的數據。
確認要求。
如果交談解除分配類型設定為 [CM_DEALLOCATE_CONFIRM] 或 [CM_DEALLOCATE_SYNC_LEVEL,同步處理層級設定為 CM_CONFIRM,則會要求解除分配。
CPI-C 不會使用連入要求到傳送指標。
如果交談處於SEND_PENDING狀態,本機程式可能會發出 Set_Error_Direction ,以指定報告錯誤是由接收的數據或成功接收數據之後處理本機程式所產生。
備註
本機程式可以使用 Send_Error 來通知合作夥伴計劃所收到數據中遇到的錯誤、拒絕確認要求,或截斷正在傳送的不完整邏輯記錄。
Send_Error 排清本機 RU 傳送緩衝區,並傳送夥伴程式傳送緩衝區的內容,後面接著錯誤通知。
錯誤通知會以下欄其中一個 return_code 值傳送給合作夥伴:
CM_PROGRAM_ERROR_TRUNC
CM_PROGRAM_ERROR_NO_TRUNC
CM_PROGRAM_ERROR_PURGING