Oracle APPS Integrated SOA Gateway Web Servis Yapımı
Merhaba,
Oracle EBS üzerinde servis yayını yapmak için en doğru yöntem Integrated SOA Gateway kullanılmasıdır. Integrated SOA Gateway modülünün DBA’ler tarafından Oracle EBS üzerinde kurulması gerekiyor.
Servis yapmak ve yayınlamak için SOA Gateway farklı yöntemler sunmaktadır. Bu örnekte PL/SQL ile Takım ve Futbolcular oluşturan bir servis yapacağız.
Servisi yapmak için aşağıdaki adımlar uygulanır.
1. BUSINESS_ENTITY arama koduna yeni bir CUSTOM ENTITY tanımlanır. 4. adımda bu tanımlama kullanılacaktır.
2. Veri yapısını tutan tablolar aşağıdaki SCRIPT ile oluşturulur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
create table xxntc.xxntc_anil_teams ( team_id number primary key, bulk_request_name varchar2(100), team_name varchar2(240), team_budget number, team_establishment_date date, creation_date date, created_by number, last_update_date date, last_updated_by number, last_update_login number ); create public synonym xxntc_anil_teams for xxntc.xxntc_anil_teams; create sequence xxntc.xxntc_anil_teams_s start with 1; create public synonym xxntc_anil_teams_s for xxntc.xxntc_anil_teams_s; create table xxntc.xxntc_anil_team_players ( player_id number primary key, team_id number, player_name varchar2(120), player_date_of_birth date, player_salary number, creation_date date, created_by number, last_update_date date, last_updated_by number, last_update_login number ); create public synonym xxntc_anil_team_players for xxntc.xxntc_anil_team_players; create sequence xxntc.xxntc_anil_team_players_s start with 1; create public synonym xxntc_anil_team_players_s for xxntc.xxntc_anil_team_players_s; create table xxntc.xxntc_anil_team_results ( result_id number primary key, bulk_request_name varchar2(100), team_id number, team_name varchar2(240), description varchar2(240), creation_date date, created_by number, last_update_date date, last_updated_by number, last_update_login number ); create public synonym xxntc_anil_team_results for xxntc.xxntc_anil_team_results; create sequence xxntc.xxntc_anil_team_results_s start with 1; create public synonym xxntc_anil_team_results_s for xxntc.xxntc_anil_team_results_s; |
XXNTC_ANIL_TEAMS tablosu takımları, XXNTC_ANIL_TEAM_PLAYERS tablosu da oyuncuları tutmak için tasarlanmıştır. XXNTC_ANIL_TEAM_RESULTS tablosu ise servis sonuçlarının yazıldığı tablodur ve servisi çağıran talebe dönüş yapmak için kullanılır.
3. Servise veri yapısını yansıtabilmek için Pl/Sql OBJECT ve TABLE TYPE tipindeki objelerden yararlanmak gerekir. Mantıksal yapımızı yansıtacak objeleri aşağıdaki SCRIPT’ler ile oluşturuyoruz.
XX_PLAYER: Oyuncu bilgilerini tutan obje.
1 2 3 4 5 6 7 |
create or replace type xx_player as object ( player_name varchar2(240), player_date_of_birth date, player_salary number ); |
XX_PLAYER_TABLE: Birden fazla oyuncu gönderimini sağlamak için XX_PLAYER objesinden TABLE TYPE oluşturulur.
1 2 3 |
create or replace type xx_player_table is table of xx_player; |
XX_TEAM: Takım bilgilerini tutan objedir. Birden fazla oyuncu bilgisini aynı takım altında alabilmek için takım objesinin içine oyuncu tablo tipi ayrıca eklenir.
1 2 3 4 5 6 7 8 |
create or replace type xx_team as object ( team_name varchar2(240), team_budget number, team_establishment_date date, team_players xx_player_table ); |
XX_TEAM_TABLE: Birden fazla takım gönderilmesini/alınabilmesini sağlayan tablo tipidir.
1 2 3 |
create or replace type xx_team_table is table of xx_team; |
XX_TEAM_RETURN: Takımın oluşup oluşmadığına dair sonucunun dönüş yapıldığı obje tipi.
1 2 3 4 5 6 7 |
create or replace type xx_team_return as object ( team_id number, team_name varchar2(240), description varchar2(240) ); |
XX_TEAM_RETURN_TABLE: Birden fazla takıma ait dönüş yapabilmek için oluşturulan tablo tipidir.
1 2 3 |
create or replace type xx_team_return_table is table of xx_team_return; |
4. Obje yapısı tamamlandıktan sonra veritabanı paketinin SPEC bölümü oluşturulur.
Dikkat edilmesi gereken nokta normal SPEC dosyalarından farklı olarak, çeşitli ANNOTATION etiketleri kullanılarak, servisin kendisinin ve içindeki fonksiyonların tanımı yapılır. Paket yaratma komutunun hemen altında HEADER bilgisi yer alır. HEADER bilgisnin hemen altında boşluk olmadan servis başlık tanımı yapılır. PRODUCT olarak CUSTOM uygulama yazılımı seçilebilir veya belirli standart bir modül için yapılan servis ise, ilgili modülün kısa kodu da seçilebilir. CATEGORY kısmına ise eğer yapılan iş var olan BUSINESS ENTITY verileri ile anlamlandırılamıyorsa, 1.adımda oluşturulan CUSTOM ENTITY seçilebilir.
Serviste kullanılması istenilen her prosedür veya fonksiyonun üzerine boşluk olmadan başlığa benzer şekilde ANNOTATION tanımları yapılır. Paketin SPEC dosyası pks uzantılı değil pls uzantılı lokal ortama kaydedilir.
Paket BODY dosyası standart dosyalar ile aynıdır ve uzantısı pkb’dir. BODY prosedür ve fonksiyonların implementasyonları gerçekleştrilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
create or replace package xx_team_service as /* $Header: XX_TEAM_SERVICE.pls 120.0 2014/12/03 17:10 aaltunkan $ */ /*# * This custom PL/SQL package can be used to manipulate team data * @rep:scope public * @rep:product XXNTC * @rep:displayname Send Team Data * @rep:category BUSINESS_ENTITY XX_TEAM_ENTITY */ g_user_id number := fnd_profile.value('USER_ID'); g_login_id number := fnd_profile.value('LOGIN_ID'); /*# * Use this method to send team data * @param bulk_request_name request name * @param teams_data team data object records * @return xx_team_return_table * @rep:displayname Send Team Collection Data * @rep:category BUSINESS_ENTITY XX_TEAM_ENTITY * @rep:scope public * @rep:lifecycle active */ function send_teams_data ( bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type, teams_data in xx_team_table ) return xx_team_return_table; procedure insert_result ( p_bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type, p_team_id in number, p_team_name in xxntc.xxntc_anil_teams.team_name%type, p_description in xxntc.xxntc_anil_team_results.description%type ); function generate_team_output(p_bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type) return xx_team_return_table; end; |
BODY yazılırken dikkat edilmesi gereken noktalardan biri “replace” fonksiyonunun kullanımıdır. Fonksiyon chr(0) yani null karakterleri replace etmek için kullanılmıştır. Bazı CLIENT talepleri boş tanımı olarak C dilindeki “\0” yani NULL karakterini yollamaktadırlar. Oracle bu durumda alanı NULL görmemektedir ve olası IF kontrollerinizi bozmaktadır. Dolayısıyla her ihtimale karşı replace edilmesi gerekir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
create or replace package body xx_team_service as /* $Header: XX_TEAM_SERVICE.pkb 120.0 2014/12/03 17:10 aaltunkan $ */ function send_teams_data ( bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type, teams_data in xx_team_table ) return xx_team_return_table is l_team_id number; l_player_id number; l_budget_exception exception; begin for i in 1..teams_data.count loop savepoint before_insert; begin --insert teams l_team_id := xxntc_anil_teams_s.nextval; insert into xxntc_anil_teams ( team_id, bulk_request_name, team_name, team_budget, team_establishment_date, creation_date, created_by, last_update_date, last_updated_by, last_update_login ) values ( l_team_id, replace(bulk_request_name, chr(0), null), replace(teams_data(i).team_name, chr(0), null), replace(teams_data(i).team_budget, chr(0), null), replace(teams_data(i).team_establishment_date, chr(0), null), sysdate, g_user_id, sysdate, g_user_id, g_login_id ); if replace(teams_data(i).team_budget, chr(0), null) < 1000 then raise l_budget_exception; end if; --insert players for j in 1..teams_data(i).team_players.count loop l_player_id := xxntc_anil_team_players_s.nextval; insert into xxntc_anil_team_players ( player_id, team_id, player_name, player_date_of_birth, player_salary, creation_date, created_by, last_update_date, last_updated_by, last_update_login ) values ( l_player_id, l_team_id, replace(teams_data(i).team_players(j).player_name, chr(0), null), replace(teams_data(i).team_players(j).player_date_of_birth, chr(0), null), replace(teams_data(i).team_players(j).player_salary, chr(0), null), sysdate, g_user_id, sysdate, g_user_id, g_login_id ); end loop; insert_result(bulk_request_name, l_team_id, replace(teams_data(i).team_name, chr(0), null), 'Team is created in Oracle EBS!'); exception when l_budget_exception then insert_result(bulk_request_name, l_team_id, replace(teams_data(i).team_name, chr(0), null), 'Budget must be greater than 1000!'); rollback to before_insert; when others then insert_result(bulk_request_name, l_team_id, replace(teams_data(i).team_name, chr(0), null), 'Unexcepted Error:'||sqlcode || '-' || sqlerrm); rollback to before_insert; end; end loop; return generate_team_output(bulk_request_name); exception when others then return null; end; procedure insert_result ( p_bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type, p_team_id in number, p_team_name in xxntc.xxntc_anil_teams.team_name%type, p_description in xxntc.xxntc_anil_team_results.description%type ) is pragma autonomous_transaction; l_result_id number; begin l_result_id := xxntc_anil_team_results_s.nextval; insert into xxntc_anil_team_results ( result_id, bulk_request_name, team_id, team_name, description, creation_date, created_by, last_update_date, last_updated_by, last_update_login ) values ( l_result_id, p_bulk_request_name, p_team_id, p_team_name, p_description, sysdate, g_user_id, sysdate, g_user_id, g_login_id ); commit; exception when others then rollback; end; function generate_team_output(p_bulk_request_name in xxntc.xxntc_anil_teams.bulk_request_name%type) return xx_team_return_table is l_return_record xx_team_return; l_return_table xx_team_return_table := xx_team_return_table(); begin for s in ( select rownum rn, x.* from (select * from xxntc_anil_team_results where bulk_request_name = p_bulk_request_name) x ) loop l_return_record := xx_team_return(null, null, null); l_return_record.team_id := s.team_id; l_return_record.team_name := s.team_name; l_return_record.description := s.description; l_return_table.extend; l_return_table(s.rn) := l_return_record; end loop; return l_return_table; exception when others then return null; end; end; |
5. Paket dosyaları APPS üzerinde derlenir.
6. PLS uzantılı SPEC dosyası FTP ile uygulama sunucusu /tmp klasörüne UPLOAD edilir.
7. Uygulama sunucusuna SSH ile bağlanılır ve aşağıdaki komut ile PLS uzantılı dosya, hazır tanımlı bir PERL script ile PARSE edilir ve ILDT uzantılı dosya oluşturulur. ILDT dosyasının oluşacağı dizin isteğe bağlı değiştirilebilinir.
1 2 3 |
$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadmin xxntc:patch/115/sql:XX_TEAM_SERVICE:12.0=/tmp/XX_TEAM_SERVICE.pls |
8. Yeni oluşan ILDT uzantılı dosyaya yetki verilir.
1 2 3 |
chmod 777 XX_TEAM_SERVICE.ildt |
9. ILDT uzantılı dosya FNDLOAD programı yardımı ile veritabanına aktarılır.
1 2 3 |
$FND_TOP/bin/FNDLOAD apps/apps 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct XX_TEAM_SERVICE.ildt |
10. EBS uygulamasına SYSADMIN kullanıcı ile giriş yapılır ve Integrated SOA Gateway -> Integration Repository adımı seçilir.
11. Açılan ekranda “Search” butonun basılır.
12. Arama bölümünde Internal Name bölümüne servisin kısa adı yazılır ve “Go” butonuna basılır.
13. Açılan ekranda “Generate WSDL” butonuna basılarak Web Servis tanım dokümanı (WSDL) oluşturulur.
14. Servise güvenlik eklemek için EBS kullanıcılarından birine veya rol grubuna yetki verilir.
15. “Authentication Type” yanında bulunan “Username Token” işaretlenir ve “Deploy” butonuna basılır. Bu özellik servise wsse:security ekleyecektir.
16. View WSDL linkine tıklanarak WSDL görüntülenir.
Test Etmek İçin
1. Bilgisayara SoapUI ücretsiz versyon kurulur.
2. Üretilen WSDL linki SoapUI programında servis projesi olarak oluşturulur.
3. Request bölümüne aşağıdaki XML yapıştırılır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xx="http://xmlns.oracle.com/apps/xxntc/soaprovider/plsql/xx_team_service/" xmlns:send="http://xmlns.oracle.com/apps/xxntc/soaprovider/plsql/xx_team_service/send_teams_data/" xmlns:soap="soap"> <soapenv:Header> <xx:SOAHeader> <!--Optional:--> <xx:Responsibility>PAYABLES_MANAGER</xx:Responsibility> <!--Optional:--> <xx:RespApplication>SQLAP</xx:RespApplication> <!--Optional:--> <xx:SecurityGroup>STANDARD</xx:SecurityGroup> <!--Optional:--> <xx:NLSLanguage>TURKISH</xx:NLSLanguage> <!--Optional:--> <xx:Org_Id></xx:Org_Id> </xx:SOAHeader> <wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <wsse:UsernameToken> <wsse:Username>NTC_ANIL</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">111111</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <send:InputParameters> <!--Optional:--> <send:BULK_REQUEST_NAME>BULK-TEST-1</send:BULK_REQUEST_NAME> <!--Optional:--> <send:TEAMS_DATA> <!--Zero or more repetitions:--> <send:TEAMS_DATA_ITEM> <!--Optional:--> <send:TEAM_NAME>TEST</send:TEAM_NAME> <!--Optional:--> <send:TEAM_BUDGET>50000</send:TEAM_BUDGET> <!--Optional:--> <send:TEAM_ESTABLISHMENT_DATE>2015-03-10T02:00:00</send:TEAM_ESTABLISHMENT_DATE> <!--Optional:--> <send:TEAM_PLAYERS> <!--Zero or more repetitions:--> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> </send:TEAM_PLAYERS> </send:TEAMS_DATA_ITEM> <send:TEAMS_DATA_ITEM> <!--Optional:--> <send:TEAM_NAME>TEST2</send:TEAM_NAME> <!--Optional:--> <send:TEAM_BUDGET>50000</send:TEAM_BUDGET> <!--Optional:--> <send:TEAM_ESTABLISHMENT_DATE>2015-03-10T02:00:00</send:TEAM_ESTABLISHMENT_DATE> <!--Optional:--> <send:TEAM_PLAYERS> <!--Zero or more repetitions:--> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> </send:TEAM_PLAYERS> </send:TEAMS_DATA_ITEM> <send:TEAMS_DATA_ITEM> <!--Optional:--> <send:TEAM_NAME>TEST3</send:TEAM_NAME> <!--Optional:--> <send:TEAM_BUDGET>400</send:TEAM_BUDGET> <!--Optional:--> <send:TEAM_ESTABLISHMENT_DATE>2015-03-10T02:00:00</send:TEAM_ESTABLISHMENT_DATE> <!--Optional:--> <send:TEAM_PLAYERS> <!--Zero or more repetitions:--> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> <send:TEAM_PLAYERS_ITEM> <!--Optional:--> <send:PLAYER_NAME>ANIL ALTUNKAN</send:PLAYER_NAME> <!--Optional:--> <send:PLAYER_DATE_OF_BIRTH>1987-12-30</send:PLAYER_DATE_OF_BIRTH> <!--Optional:--> <send:PLAYER_SALARY>2000</send:PLAYER_SALARY> </send:TEAM_PLAYERS_ITEM> </send:TEAM_PLAYERS> </send:TEAMS_DATA_ITEM> </send:TEAMS_DATA> </send:InputParameters> </soapenv:Body> </soapenv:Envelope> |
4. Talep gönderilir.
5. Response aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <OutputParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/apps/xxntc/soaprovider/plsql/xx_team_service/send_teams_data/"> <SEND_TEAMS_DATA> <SEND_TEAMS_DATA_ITEM> <TEAM_ID>2</TEAM_ID> <TEAM_NAME>TEST</TEAM_NAME> <DESCRIPTION>Team is created in Oracle EBS!</DESCRIPTION> </SEND_TEAMS_DATA_ITEM> <SEND_TEAMS_DATA_ITEM> <TEAM_ID>3</TEAM_ID> <TEAM_NAME>TEST2</TEAM_NAME> <DESCRIPTION>Team is created in Oracle EBS!</DESCRIPTION> </SEND_TEAMS_DATA_ITEM> <SEND_TEAMS_DATA_ITEM> <TEAM_ID>4</TEAM_ID> <TEAM_NAME>TEST3</TEAM_NAME> <DESCRIPTION>Budget must be greater than 1000!</DESCRIPTION> </SEND_TEAMS_DATA_ITEM> </SEND_TEAMS_DATA> </OutputParameters> </env:Body> </env:Envelope> |
6. Aşağıdaki sorgularla tablolar kontrol edilir.
1 2 3 4 5 |
select * from xxntc_anil_teams where bulk_request_name = 'BULK-TEST-1'; |
Sonuç:
1 2 3 4 5 6 7 8 |
TEAM_ID BULK_REQUEST_NAME TEAM_NAME TEAM_BUDGET TEAM_ESTABLISHMENT_DATE CREATION_DATE CREATED_BY LAST_UPDATE_DATE LAST_UPDATED_BY LAST_UPDATE_LOGIN ---------- -------------------- -------------------- ----------- ----------------------- ------------- ---------- ---------------- --------------- ----------------- 2 BULK-TEST-1 TEST 50000 10/03/2015 10/03/2015 1013537 10/03/2015 1013537 -1 3 BULK-TEST-1 TEST2 50000 10/03/2015 10/03/2015 1013537 10/03/2015 1013537 -1 2 rows selected. |
1 2 3 4 5 |
select xp.* from xxntc_anil_team_players xp, xxntc_anil_teams xt where xp.team_id = xt.team_id and xt.bulk_request_name = 'BULK-TEST-1'; |
Sonuç:
1 2 3 4 5 6 7 8 9 10 |
PLAYER_ID TEAM_ID PLAYER_NAME PLAYER_DATE_OF_BIRTH PLAYER_SALARY CREATION_DATE CREATED_BY LAST_UPDATE_DATE LAST_UPDATED_BY LAST_UPDATE_LOGIN ---------- ---------- -------------------- -------------------- ------------- ------------- ---------- ---------------- --------------- ----------------- 2 2 ANIL ALTUNKAN 30/12/1987 2000 10/03/2015 1013537 10/03/2015 1013537 -1 3 2 ANIL ALTUNKAN 30/12/1987 2000 10/03/2015 1013537 10/03/2015 1013537 -1 4 3 ANIL ALTUNKAN 30/12/1987 2000 10/03/2015 1013537 10/03/2015 1013537 -1 5 3 ANIL ALTUNKAN 30/12/1987 2000 10/03/2015 1013537 10/03/2015 1013537 -1 4 rows selected. |
1 2 3 4 5 |
select * from xxntc_anil_teams where bulk_request_name = 'BULK-TEST-1'; |
Sonuç:
1 2 3 4 5 6 7 8 |
TEAM_ID BULK_REQUEST_NAME TEAM_NAME TEAM_BUDGET TEAM_ESTABLISHMENT_DATE CREATION_DATE CREATED_BY LAST_UPDATE_DATE LAST_UPDATED_BY LAST_UPDATE_LOGIN ---------- -------------------- -------------------- ----------- ----------------------- ------------- ---------- ---------------- --------------- ----------------- 2 BULK-TEST-1 TEST 50000 10/03/2015 10/03/2015 1013537 10/03/2015 1013537 -1 3 BULK-TEST-1 TEST2 50000 10/03/2015 10/03/2015 1013537 10/03/2015 1013537 -1 2 rows selected. |
Servisi Silmek İçin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
declare cursor c_irep is select class_id, class_name from fnd_irep_classes where irep_name = 'XX_TEAM_SERVICE' -- package name order by class_id desc; begin for r_irep in c_irep loop delete from fnd_irep_class_datasources where class_id = r_irep.class_id; delete from fnd_lookup_assignments where obj_name = 'FND_IREP_CLASSES' and instance_pk1_value = to_char(r_irep.class_id); delete from fnd_child_annotations where parent_id = r_irep.class_id and parent_flag = 'C'; delete from fnd_irep_uses_tables where class_id = r_irep.class_id; delete from fnd_irep_uses_maps where class_id = r_irep.class_id; delete from fnd_lookup_assignments where obj_name = 'FND_IREP_FUNCTION_FLAVORS' and instance_pk1_value in (select function_id from fnd_form_functions where irep_class_id = r_irep.class_id); delete from fnd_child_annotations where parent_flag = 'F' and parent_id in (select function_id from fnd_form_functions where irep_class_id = r_irep.class_id); delete from fnd_parameters where function_id in (select function_id from fnd_form_functions where irep_class_id = r_irep.class_id); delete from fnd_irep_function_flavors where function_id in (select function_id from fnd_form_functions where irep_class_id = r_irep.class_id); delete from fnd_irep_classes where assoc_class_id = r_irep.class_id; delete from fnd_irep_classes where class_id = r_irep.class_id; delete from fnd_form_functions where irep_class_id = (select class_id from fnd_irep_classes where assoc_class_id = r_irep.class_id); delete from fnd_object_key_sets where object_id = r_irep.class_id; delete from fnd_lookup_assignments where obj_name = 'FND_OBJECTS' and instance_pk1_value = to_char(r_irep.class_id); delete from fnd_child_annotations where parent_id = r_irep.class_id and parent_flag = 'O'; delete from fnd_object_type_members where object_id = r_irep.class_id; delete from fnd_irep_class_parent_assigns where class_name = r_irep.class_name; end loop; commit; end; / |
Merhabalar,
Blogdaki konu seçimleriniz çok faydalı. Değerli paylaşımlarınız için çok teşekkürler.
Yukarıda 14.maddenin 2.ekran görüntüsü tıklayınca açılmıyor. Düzeltebilirseniz memnun olurum.
Merhaba,
Yorumunuz için teşekkür ederim. Ekran görüntüsünü düzelttim.
Selam,
Tam ildt dosyasını oluşturma aşamasında “Can’t locate Class/MethodMaker.pm …. ” ile başlayan bir hata aldım. Sanırım DBA in perl ile ilgili birşeyler yapması lazım değil mi?
Merhaba,
Bu SOA Gateway için klasik bir sorun. 1079218.1 numaralı METALINK dokümanında çözüm mevcut. PATCH uygulanıp ardından PERL programının make ve install komutlarıyla tekrar derlenmesi gerekiyor.
Merhaba,
perl ile ilgili daha önce yazdığım sorunu aştık. Şimdi çalışıyor.
Sadece sormak istediğim birşey var?
Servise GRANT verdiğimiz yerde tek kullanıcı seçtiğimde (Kendi EBS Apps kullanıcım) response olarak “Kullanıcının servis yürütme yetkisi yok.” mesajı aldım.
GRANT tanımına geri dönüp daha önceki tanımı silmeden “All Users” verince çalıştı.
Bu konuda bir fikriniz var mı? EBS Apps kullanıcısına servis çalıştırma yetkisi verdiğimiz ayrı bir yer mi var acaba?
Merhaba,
Bazen bu durum oluşabiliyor.
Yetkiyi kaldırın. OAFM sunucusunu kapayıp açın. WSDL’ı tekrar üretin. Yetkiyi ekleyip, DEPLOY butonuna basın.