J'essaie de configurer un exemple de projet simple dans BizTalk qui obtient des modifications apportées à une table dans une base de données SQL Server et met à jour une copie de cette table dans Oracle db.BizTalk - générer un schéma à partir d'Oracle stocké proc avec argument variable de table
Du côté de SQL Server, j'ai un proc stocké appelé GetItemChanges() qui renvoie un nombre variable d'enregistrements. Du côté d'Oracle, j'ai un proc stocké nommé Update_Item_Region_Table() conçu pour prendre une table d'enregistrements en tant que paramètre afin qu'il puisse traiter tous les enregistrements retournés par GetItemChanges() en un seul appel. Il est défini comme ceci:
create or replace type itemrec is OBJECT (
UPC VARCHAR2(15),
REGION VARCHAR2(5),
LONG_DESCRIPTION VARCHAR2(50),
POS_DESCRIPTION VARCHAR2(30),
POS_DEPT VARCHAR2(5),
ITEM_SIZE VARCHAR2(10),
ITEM_UOM VARCHAR2(5),
BRAND VARCHAR2(10),
ITEM_STATUS VARCHAR2(5),
TIME_STAMP VARCHAR2(20),
COSTEDBYWEIGHT INTEGER
);
create or replace type tbl_of_rec is table of itemrec;
create or replace PROCEDURE Update_Item_Region_table (Item_Data tbl_of_rec)
IS
errcode integer;
errmsg varchar2(4000);
BEGIN
for recIndex in 1 .. Item_Data.COUNT
loop
update FL_ITEM_REGION_TEST set
Region = Item_Data(recIndex).Region,
Long_description = Item_Data(recIndex).Long_description,
Pos_Description = Item_Data(recIndex).Pos_description,
Pos_Dept = Item_Data(recIndex).Pos_dept,
Item_Size = Item_Data(recIndex).Item_Size,
Item_Uom = Item_Data(recIndex).Item_Uom,
Brand = Item_Data(recIndex).Brand,
Item_Status = Item_Data(recIndex).Item_Status,
Timestamp = to_date(Item_Data(recIndex).Time_stamp, 'yyyy-mm-dd HH24:mi:ss'),
CostedByWeight = Item_Data(recIndex).CostedByWeight
where
UPC = Item_Data(recIndex).UPC;
log_message(Item_Data(recIndex).Region, '', 'Updated item ' || Item_Data(recIndex).UPC || '.');
end loop;
EXCEPTION
WHEN OTHERS THEN
errcode := SQLCODE();
errmsg := SQLERRM();
log_message('CE', '', 'Error in Update_Item_Region_table(): Code [' || errcode || '], Msg [' || errmsg || '] ...');
END;
Dans mon projet BizTalk que je produis les schémas et les informations de liaison pour les procédures stockées. Pour la procédure Oracle, j'ai spécifié un chemin pour le paramètre GeneratedUserTypesAssemblyFilePath afin de générer une DLL pour contenir la définition des types de données. Dans le port d'envoi sur le serveur, je mets le chemin d'accès à cette DLL Types dans le paramètre UserAssembliesLoadPath.
J'ai créé une carte pour traduire le schéma GetItemChanges() en schéma Update_Item_Region_Table().
Lorsque je l'exécute les données sont extraites et transformées bien, mais fait une exception en essayant de transmettre les données au proc Oracle:
* L'adaptateur n'a pas réussi à transmettre un message va envoyer le port « WcfSendPort_OracleDBBinding_HOST_DATA_Procedure_Custom » avec l'URL " oracledb: // dvotst/". Il sera retransmis après l'intervalle de nouvelle tentative spécifié pour ce port d'envoi. Détails: "System.InvalidOperationException: mappage de type personnalisé pour « HOST_DATA.TBL_OF_REC » est pas spécifié ou est invalide *
Il est donc apparemment pas obtenir les informations sur le
TBL_OF_REC type de données personnalisé dans la DLL Types..des conseils sur la façon de faire ce travail?
Il pourrait être bénéfique pour marquer ce que la bonne réponse. –