SAPãªã©ã®å€§èŠæš¡ãªã·ã¹ãã ãšãå°ãããªãããæè»æ§ã®é«ãã·ã¹ãã ãçµ±åãããšãããããã¯ã¯ãããã°ãäž¡æ¹ãæ倧éã«æŽ»çšããããã«åžžã«èå³æ·±ããã®ã§ããã
ç¹ã«ãç§ã®äŸã§ã¯ãSAP ERPãšDjangoã®çµ±åã«ã€ããŠèª¬æããŸãã
ææŠãã
ç§ãã¡ã®ææã®å·ã«ãã£ãŠå°å ¥ãããå€ãã®ç°ãªãå¶åŸ¡ã·ã¹ãã ã«ãããEgaisãMercuryããã®ä»å€ãã®äŒæ¥ãéæ©ãé©å¿ããå§ããïŒå€§äŒæ¥åãã®ïŒããäžåšçšãªã·ã¹ãã ãæ°ããæ¡ä»¶ã«åããå§ããŸããã ç§ãç¹ã«é©å¿ããããšã¯èšããŸããããæèã¯åžžã«ç§ã®é ã®äžã§å±éãããŸãã-å¥åã®ãã©ãããã©ãŒã ã«åºã¥ããŠãã¹ãŠã®åäžã®è¿œè·¡ã·ã¹ãã ãäœæããããšã
æ段
䜿çšããããŒã«ãéžæããã®ã«æéãããããããªãã®ã§ãç§ã¯Pythonããã°ã©ãã³ã°èšèªãéžæããŸãããè±å¯ãªã©ã€ãã©ãªãšDjangoãã©ãããã©ãŒã ãè±å¯ã«ãããããFlaskãOdooã§ã¯ãªãDjangoãéžæããŠãã ããã ãã§ã«Odooããã©ãããã©ãŒã ãšããŠäœ¿çšããŠããŠããã®ãã¡ã®1ã€ãå匷ãããã£ãã®ã§ãããæåã®1ã€ãååŸãããã®ã§ãããçç±ã¯ããããŸããã SAPãéçºããããã®ERPã·ã¹ãã -ãããããã§ã¯éžæè¢ããããŸããã§ããã ç§ã¯SAPã€ã³ãã°ã¬ãŒã¿ãŒã®äŒç€Ÿã§åããŠããã®ã§ããã®ã·ã¹ãã ã®ãµã³ãããã¯ã¹ã«é¢ããç¥èãšã¢ã¯ã»ã¹æš©ã®äž¡æ¹ãæã£ãŠããã®ã§ãä»äºã劚ããããããšãªãèœã¡çããŠä»äºãããããã®ãã¹ãŠã®æ¡ä»¶ããããŸãã
ããã³ããšã³ããžã£ã³ãŽ
ç§ãæåã«å§ããã®ã¯ãç¹å®ã®ã¿ã¹ã¯ãå®åŒåãããããçŽã«æžãããšã§ãããäžè¬çã«ãäœããã³ãŒãã£ã³ã°ããåã«ãããã»ã¹ã説æããåã«å šå¡ã«ã¢ããã€ã¹ããŸãããããŠãå€åºå ã§å€æŽãããã説æã§ãå€æŽãããããããšã¯éåžžã«éèŠã§ã
ããã«ãããã°ã©ã èšè¿°ã®æåã®éåžžã«ç²éãªããŒãžã§ã³ããããŸãã
çºä¿¡ããã»ã¹æ¬¡ã«ãDjangoãåŠã³ãããã»ã¹ãšããŒã¿ããŒã¹ã¹ããŒããæç»ãå§ããŸããã
1ïŒåºè·äŒç¥šãäœæãããŸãã
2ïŒãã¬ãããã²ãŒãã«éãå Žå-èªåæäœãšåèªåæäœ
aã èªåæäœ/ãã¬ãããã²ãŒããééãããšãããã°ã©ã ã¯WMSã·ã¹ãã å ã®RFCã«ããããã®çš®é¡ãšãã®æ°ã«é¢ããæ å ±ãèŠæ±ããWMSã·ã¹ãã ãžã®é ä¿¡ã«å¯Ÿããèå¥å¿çãè¿ããŸãïŒå庫ã¿ã¹ã¯ïŒãããã³ã°ã¿ã¹ã¯ïŒã確èªããŸãïŒãã¬ããããã³ãã¹ãŠã®æè³ïŒã ãŸããWMSã·ã¹ãã ã®æ å ±ã䜿çšããŠãã¹ãŠã®ç©åçšåæããã§ãã¯ããŸã
bã åèªåæäœ/ãªãã¬ãŒã¿ãŒãã²ãŒãã·ã¹ãã ã«é é/æ©æ¢°çªå·ãå ¥åããã²ãŒããä»ããŠãã¬ãããé転ãããšãã²ãŒãã·ã¹ãã ã¯åãã¬ããã®ãªã¯ãšã¹ããWMSã·ã¹ãã ã«éããå éšã®ç©åã¹ã¿ã³ãã確èªããŸãã
3ïŒé éã®æ§æãäŒèšã·ã¹ãã ã«éä¿¡ãããŸã
çä¿¡ããã»ã¹
1ïŒå ¥è·äŒç¥šãäœæãããŸãã
2ïŒã²ãŒããééãããã¬ããéè·¯
3ïŒçŸåšã®å庫ã§ã®å£²æéã®æ§æã«é¢ããèŠæ±ãäŒèšã·ã¹ãã ã«éä¿¡ãããŸã
4ïŒç©åçšåæãã¬ããã®å éšæ§æã¯ããã®äŒèšã·ã¹ãã ã«åºã¥ããŠç¢ºèªãããŸãã
5ïŒãã¬ãããã¢ã³ããŒãããããã®ä¿¡å·ãWMSã·ã¹ãã ã«éä¿¡ãããŸãã
å¿ èŠãªããŒãã« ïŒ
ã²ãŒãïŒ
èå¥å
å庫ïŒ
説æ
ééã¡ãã»ãŒãž ïŒ
ã¿ã€ãã«ïŒ
æéãã·ã¹ãã ãå庫çªå·ãã²ãŒãIDã
圹è·ïŒ
æ¶è²»çšåæãç»é²æéãã¿ã€ãã«ã®ãã€ã³ã
ERPæ§æã¡ãã»ãŒãžïŒã€ã³ããŠã³ãé ä¿¡ïŒ
ã¿ã€ãã«ïŒ
æéãã·ã¹ãã ãé éçªå·ã
圹è·ïŒ
ææãç©ååæããã¬ããçªå·ïŒããå ŽåïŒ
éçŽãããã¡ãã»ãŒãžïŒERPããã®ããŒã¿ã«åºã¥ãïŒ ïŒ
ã¿ã€ãã«ïŒ
æéãã·ã¹ãã ãå庫çªå·ãã²ãŒãèå¥åãçµçã·ã¹ãã ããã®é éçªå·ãæ¹åæšèïŒåºå ¥ãïŒãæ€èšŒã¹ã¯ãªããæšèãæ©æ¢°çªå·ãå庫ã²ãŒãçªå·ã
äœçœ®ïŒç©ååæããã¬ããçªå·ïŒãªãã·ã§ã³ïŒãææïŒãªãã·ã§ã³ïŒãé éçªå·ãæ©æ¢°çªå·ãããã¥ã¡ã³ãå ã®ã¢ã€ãã çªå·ããããïŒãªãã·ã§ã³ïŒã梱å ïŒãªãã·ã§ã³ïŒ
Djangoã§å€æããããã«ãããŒãã«ã¢ãã«ã®äœæã¯éåžžã«ç°¡åã§äŸ¿å©ã§ã次ã®ããã«ãªããŸãã
class SapOptions(models.Model): name = models.CharField(verbose_name=' ', max_length=50) baseurl = models.CharField(max_length=500, verbose_name='Url ', help_text = 'URL , , :"https://moses1005:44300/sap/opu/odata/sap/ZLS_SUPPLYCHAIN_SRV/"')# URL sapset = models.CharField(default='Enter Sapset', max_length=100, verbose_name=' ()') mandt = models.CharField(max_length=3, verbose_name='') user = models.CharField(max_length=15, verbose_name=' ') passwd = models.CharField(max_length=15, verbose_name='') verify = models.BooleanField(default=False, help_text = ' ') def __str__(self): return ': '+self.name + ', : '+self.mandt class Gates(models.Model): from mainAPP.sap_connector import get_lgorts_fromsap ident = models.CharField(verbose_name='', max_length=10, help_text='',unique=True) wh = models.CharField(verbose_name=' ', default='',max_length=10, help_text=' WMS') help = models.CharField(verbose_name='', default='',max_length= 500,help_text=' , , , ') try: lgorts = get_lgorts_fromsap() except: lgorts = [('No Connect', 'No Connect'),] lgort = models.CharField(verbose_name='',default='0000', max_length=20, choices=lgorts) def __str__(self): return self.ident +' : '+self.wh+' : '+self.help
ãã®åŸãSAPãããã£ã¬ã¯ããªãååŸããæ¹æ³ããã§ã«ç解ããŠãããããçµ±åã¯å®å šã«ãã·ãŒã ã¬ã¹ãã«èŠããããŒã¯ãŒãã¯ãèŠãç®ãã§ãããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ã ãããDjangoãåŠãã åŸïŒä»æ©æ°äººæ®ºããŸããïŒãæ å ±ãå ¥åããŠããSAP ERPã«éä¿¡ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãäœæããŸããã
åãå ¥ãæ å ±ãå ¥åããæåã®ç»é¢ã¯æ¬¡ã®ããã«ãªããŸãã
- ãŠã§ã¢ããŠã¹-ç°¡åãªèª¬æä»ãã®SAP ERPãšã®çŽæ¥çµ±åã
- ERPé ä¿¡-é ä¿¡ã¯SAP ERPããå ¥åãããå ¥åæã«æ€èšŒãããŸãïŒãã®ãããªé ä¿¡ããããã©ããã«ããããããSAPã«èŠæ±ãè¡ãããŸãã
- TTN-ããã§ã¯ãã¹ãŠãæ確ã§ãïŒwaybillïŒã
- ããŒãããŒçªå·-ããã¯SAP ERPã®ããŒãããŒçªå·ã§ãããã®ãã£ãŒã«ãã¯ãªãã·ã§ã³ã§ãé éå ãèŠã€ããããã«å°æ¥äœæãããŸãã
- ããã±ãŒãžèå¥å-ããã¯æãéèŠãªãã£ãŒã«ãã®1ã€ã§ããããã¯ãã¬ãããŸãã¯ããã±ãŒãžã®çªå·ã§ãã
ãŸããã€ã³ã¿ãŒãã§ãŒã¹ã¯ã¢ãã€ã«ç«¯æ«ïŒTSDïŒã«é©åããŠããŸã
ãã£ãŒã«ãã¯ãENTERãæŒããã³ã«ã«ãŒãœã«ã次ã®å ¥åãã£ãŒã«ãã«ãžã£ã³ãããããã«äœæããããããTTNãã²ãŒãããã¬ããããã®ãã¹ãŠã®æ å ±ãã¹ãã£ã³ãããšäŸ¿å©ã§ãã
æåŸã®ãã£ãŒã«ããã¹ãã£ã³ãããããä¿åããã¯ãªãã¯ãããšãç»é¢ãå補åã®èå¥åãå ¥åãããã€ã¢ãã°ã«ç§»åããŸãã
ãã£ãŒã«ãïŒ
- ããã¯ãEGAISã·ã¹ãã èªäœã«ãã£ãŠéä¿¡ãããèå¥åã®ãªã¹ãã®ç»é¢ã§ããèµ€ã¯ãŸã ã¹ãã£ã³ãããŠããªãèå¥åãé»è²ã¯ã¹ãã£ã³ããããEGAISã¡ãã»ãŒãžã«å«ãŸããŠããªãèå¥åãç·ã¯EGAISã«ãã£ãŠéä¿¡ããã¹ãã£ã³ãããèå¥åã§ãã
- èå¥åãå ¥åããå Žåãããã«ã¯ã+ããã¿ã³ããããŸããããã¯ãå¥ã®ãã£ãŒã«ãã®è¡šç€ºãªã©ã«å¿ èŠã§ãã
- ãšã©ãŒã¡ãã»ãŒãžãããå Žåã¯è¡šç€ºããŸãã
çµ±åã®å®è£ ïŒ
Djangoããçµ±åããã«ã¯ããã¹ãŠããæ®ããã§å®è£ ãç°¡åã§ããããšã¯æããã§ãããSAP ERPããã¯å°ãèªãå¿ èŠããããŸããã
ããã¯ã©ã®ããã«è¡ãããŸããïŒ
1ïŒå®è£ çšã®çµ±åã¯ã©ã¹ããŸãã¯ãã®ããã®éçºããã±ãŒãžãããããäœæããå¿ èŠããããŸãã ããã¯ãã©ã³ã¶ã¯ã·ã§ã³SEGWã§è¡ãããŸã
2ïŒã¯ã©ã¹ãäœæããåŸãããŒã¿ã¢ãã«ãå®çŸ©ããå¿ èŠããããŸããããã€ãã®ãªãã·ã§ã³ããããç¬èªã®ãã£ãŒã«ããäœæããããSAPã®ããŒãã«ãã¯ãªãã¯ããŸãã ã€ãŸããçµ±åçšã®ããŒã¿ã¢ãã«ãäœæããåã«ãããŒã¿çšã®ããŒãã«ãäœæããå¿ èŠããããŸããããã¯ãã©ã³ã¶ã¯ã·ã§ã³SE11ã§è¡ããããããè¡ãæ¹æ³ã¯ã€ã³ã¿ãŒãããã§ç¢ºèªã§ããŸãã ãããã£ãŠãæ§é ã®ããã«ã
ç§ã¯ãã§ã«äœæããããŒãã«æ§é ã奜ãã§ã
3ïŒç§ãã¡ãè¡ã£ãäœæ¥ã¯æ¬¡ã®ãšããã§ãã
ãçæããã¯ãªãã¯ãããšãã¯ã©ã¹ãçµ±åã«å¿ èŠãªæ§é ãçæããŸããã
4ïŒæ¬¡ã«ãããµãŒãã¹å®è£ ãã¿ãã«ã䜿çšå¯èœãªãã¹ãŠã®ã¡ãœãããç¹ã«ä»¥äžã®æ§é ã衚瀺ãããŸãã
aã äœæ-å€éšããéä¿¡ãããããŒã¿ã«åŸã£ãŠããŒãã«ã«ã¬ã³ãŒããäœæããæ¹æ³
bã åé€-èå¥åã«ãã£ãŠã¬ã³ãŒããåé€ããæ¹æ³
cã GetEntity-åäžã¬ã³ãŒããªã¯ãšã¹ãã¡ãœãã
dã GetEntitySet-åºæºã«ãã£ãŠè€æ°ã®ã¬ã³ãŒããååŸããããã®ã¡ãœãã
eã æŽæ°-ã¬ã³ãŒãå€æŽæ¹æ³
å®éããããã®ã¡ãœããã¯ãã¹ãŠéåžžã«æœè±¡çã§ããããã¡ããéãããããŸã
5ïŒã¯ã©ã¹ãçæããåŸãã©ã³ã¿ã€ã ã¢ãŒãã£ãã¡ã¯ããã©ã³ãã«ã¯ã©ã¹ã®ãªã¹ããäœæããæåŸã«DPC_EXTãæã€ã¯ã©ã¹ãéžæããŸã
ããã«ã¯ãªãã¯ããŠã¯ã©ã¹èªäœã«å ¥ããŸã
6ïŒã¯ã©ã¹ã¡ãœããã®ãªã¹ãã«å ¥ã£ãåŸãæåŸã«ãã¹ãŠã®ã¡ãœããã®ãªã¹ãã衚瀺ãããŸãã®ã§ãå¿ ãåå®çŸ©ããŠãã ãããããããªããšãããŒã¿ã¢ãã«ã®æ¬¡ã®å€æŽåŸã«ãã¹ãŠãæ¶å»ãããç§ã¯ããã«ééãã,蟱ãããŸãã...
ããšãã°ãCreateã¡ãœããã®å®è£ ã瀺ããŸã
ãã¹ãŠãéåžžã«åçŽã§ãIT_KEY_TABãå ¥åã«éããããã®ããŒã¿ã«åºã¥ããŠããã®ã³ãŒãã§ããŒãã«ã®éåžžã®ã¬ã³ãŒããŸãã¯ãšã©ãŒåºåãå®è£ ããDjangoã«è»¢éããŸãã æ£åžžã«äœæãããåºåã¯ãER_ENTITYæ§é ã«æžã蟌ãŸããŸãã
7ïŒãã©ã³ã¶ã¯ã·ã§ã³/ IWFND / MAINT_SERVICEãé·ããã®ã§ã€ã³ã¿ãŒãã§ã€ã¹ããã¹ãããŸãã ããã«å ¥ããäœæãããã¯ã©ã¹ãèŠã€ããŠããSAP Gateway Clientããã¯ãªãã¯ããŸã
åºæ¬çã«ã¯ãGETãPOSTãPUTãDELETEã®WebèŠæ±ãšãã¥ã¬ãŒã¿ã§éãããŸããSAPããã®ã¿ã
PSãäœæãããµãŒãã¹ã¯äœã§ããã¹ãã§ããŸããç§ã¯éµäŸ¿é éå¡ããã°ã©ã ã§ãã¹ãããŠããŸã
ããã¯ãgetãªã¯ãšã¹ãããGetEntitySetãã®ããã«èŠãããã®ã§ã
/ sap / opu / odata / sap / ZLS_SUPPLYCHAIN_SRV / ZLS_INBOUND_HEADSetïŒ$ format = json
ã©ãã§ïŒ
/ ZLS_SUPPLYCHAIN_SRV / -ããã¯äœæãããã¯ã©ã¹ã§ã
/ ZLS_INBOUND_HEADSetã¯ããŒã¿ã¢ãã«ã§ããã
format = jsonã¯ãååŸããããŒã¿åœ¢åŒã§ããxmlãŸãã¯jsonãéžæããŸããjsonãéžæããŸãããããç§ã«ãšã£ãŠäŸ¿å©ãªçç±ã§ãã
8ïŒåæ§ã«ãã¡ãœãããæžã
Djangoã§ããã³ããäœæããSAPåŽã§ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã
ããã§ãã¹ãŠã埩掻ãããå¿ èŠããããã¡ãœãããèšè¿°ããã®ã¯DjangoåŽã§ãã
1ïŒã»ãã·ã§ã³ãäœæãããã°ã€ã³ããŠscrf-tokenãååŸããããã«å ã«é²ãæ¹æ³
æ§ææžã¿ã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠããŒã¿ããŒã¹ããå¿ èŠãªæ å ±ãååŸããããæ°ããæ å ±ãäœæããŸã
èšé²ã ãããè¡ãã«ã¯ãDjangoã§å¥ã®ãã¡ã€ã«ãäœæããSap_connector.pyãšããååãä»ããŠèª¬æããŸã
ãã®äžã«äž»ãªæ¹æ³ããããŸãã
def sap_createSession(): # oDATA from scanner.models import SapOptions # SAP sap_opt = SapOptions.objects.all()[0] # s = requests.Session() s.headers.update({'Connection': 'keep-alive', 'X-CSRF-TOKEN': 'Fetch'}) auth = (sap_opt.user, sap_opt.passwd) try: r = s.get(sap_opt.baseurl, auth=auth,verify=sap_opt.verify) except: message = " %s %s"%(sap_opt.mandt, sap_opt.name) return ('NO TOKEN', 'NoSession', message) token = r.headers['x-csrf-token'] session = s sess = (token, session, None) return sess
2ïŒSAP ERPã®é é確èªæ¹æ³
def sap_delivery_verify(token, session, delivery): # ERP from scanner.models import SapOptions, Gates sap_opt = SapOptions.objects.all()[0] s = session format = '?$format=json' set = 'likpSet' url = sap_opt.baseurl + set + "('"+delivery+"')"+format headers = {'Content-type': 'application/json;charset=utf-8', 'X-CSRF-TOKEN': token} # auth = (sap_opt.user, sap_opt.passwd) # auth get = s.get(url, headers=headers, auth=auth,verify=sap_opt.verify)# if get.status_code ==200: delivery_out = json.loads(get.text).get('d').get('Vbeln') return (True, 'OK') else: error_text = json.loads(get.text).get('error').get('message').get('value') return (False, error_text)
3ïŒSAPãŠã§ã¢ããŠã¹ãDjangoãšçµ±åããæ¹æ³
def get_lgorts_fromsap(): from scanner.models import SapOptions session = sap_createSession() # token = session[0] session = session[1] sap_opt = SapOptions.objects.all()[0] # s = session format = '?$format=json' set = 't001lSet' url = sap_opt.baseurl + set +format headers = {'Content-type': 'application/json;charset=utf-8', 'X-CSRF-TOKEN': token} # auth = (sap_opt.user, sap_opt.passwd) # auth get = s.get(url, headers=headers, auth=auth,verify=sap_opt.verify)# jdata = json.loads(get.text) lgorts = [] for l in jdata.get('d').get('results'): l.get('lgort') lgorts.append((l.get('Lgort'),l.get('Lgort'))) return lgorts
ã¢ãã«éšåã®2çªç®ã®éšåïŒ
class Gates(models.Model): from mainAPP.sap_connector import get_lgorts_fromsap ident = models.CharField(verbose_name='', max_length=10, help_text='',unique=True) wh = models.CharField(verbose_name=' ', default='',max_length=10, help_text=' WMS') help = models.CharField(verbose_name='', default='',max_length= 500,help_text=' , , , ') try: # SAP lgorts = get_lgorts_fromsap() except: lgorts = [('No Connect', 'No Connect'),] lgort = models.CharField(verbose_name='',default='0000', max_length=20, choices=lgorts) def __str__(self): return self.ident +' : '+self.wh+' : '+self.help
çµ±åã¯æ¬¡ã®ããã«ãªããŸããDjangoèšå®ã§æ°ããå庫ãäœæãããšãã·ã¹ãã ã¯çŸåšå庫ãã£ãŒã«ãã«äœæãããŠããSAP ERPã®å庫ã衚瀺ããŸãã
4ïŒSAP ERPã§æ°ããã¬ã³ãŒããäœæããæ¹æ³
def sap_connect(token, session, data): from scanner.models import SapOptions, Gates # SAP ERP sap_opt = SapOptions.objects.all()[0] s = session delivery = data.get('delivery') url = sap_opt.baseurl + sap_opt.sapset # URL + headers = {'Content-type': 'application/json;charset=utf-8', 'X-CSRF-TOKEN': token} # auth = (sap_opt.user, sap_opt.passwd) # auth data =json.dumps({"d":{ "Mandt": sap_opt.mandt, "Lgort": Gates.objects.get(id=data.get('gates')).wh, "Vbeln":data.get('delivery'), "Mark": data.get('mark'), "Matnr": "", "Posnr": "", "Mbl": "", "InbDicid":"AAAAAAAAAAAAAAAAAAAAAA==", "DocExt": data.get('ttn'), "Exidv": data.get('pack') }}) try: r2 = s.post(url, data=data, headers=headers, auth=auth) except: return (False, ' ') if r2.status_code ==201: print(' %s '%(delivery)) return (True, ' %s : '%delivery) else: print(' %s '%(delivery)) text = r2.text SO = soup(text) s = SO.find_all("message")[0].text return (False, s)
å®éãPOSTãªã¯ãšã¹ããäœæããããã«JSON圢åŒã§ããŒã¿ãæžã蟌ãã ãã§ã
ãããã«
åçŽãªã·ããªãªã§ãSAP ERPãšçµ±åãããããã°ã©ã ãäœæããŸããã
è»ãå°çãããšãã€ã³ã¿ãŒãã§ã€ã¹ã«åãã¬ããã®æ å ±ãå ¥åããããã°ã©ã ã¯ãã¹ãŠã®ããŒã¿ãæ£ããå ¥åãããŠãããã©ããã確èªããå ¥åãã¹ãå 容ãšå ¥åæžã¿ã®æ å ±ãæäŸããŸãã ããŒã¿ãå ¥åããåŸãäœãè¡ãããããã¬ããŒãããããŒã¿ãSAP ERPã«è»¢éããŸãã ãŸãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¢ãã€ã«ããŒã¿å ¥åã€ã³ã¿ãŒãã§ã€ã¹ããé©å¿ãããŠããŸããããã¯ãããŒã¿åé端æ«ïŒTSDïŒãåããå庫ã«ãšã£ãŠéèŠã§ãã ããŒã¿ãERPã«è»¢éããåŸãã·ã¹ãã ã¯ãã©ã®ãŠã§ã¢ããŠã¹ãã©ã®èå¥åãæ¥ãããã©ã®ã¿ã€ãã®èå¥åã誰ããããåãå ¥ããããªã©ããã¹ãŠã®ããŒã¿ãä¿åããŸãã
ãã®çµæã瀟å ã®åä¿¡ããã³é信補åèå¥åãåŠçããããã°ã©ã ãããããã¹ãŠã®äœæ¥ã®90ïŒ ãã¡ã€ã³ã·ã¹ãã ãšçµ±åãããå€éšã·ã¹ãã ã§æ£ç¢ºã«å®è¡ãããŸãã
å°æ¥çã«ã¯ãçä¿¡ããããã·ãªã¢ã«çªå·ãªã©ã®ã¡ã³ããã³ã¹ã®ããã«ãã¡ã€ãã©ã€ãºããå¿ èŠããããŸããããšãã°ããã®ã€ã³ã¿ãŒãã§ã€ã¹ããé åæžãã©ã³ã¶ã¯ã·ã§ã³ãäœæãããªã©ãSAPãšã®çµ±åãããã«ç·å¯ã«ããå¿ èŠããããŸãã
PSãã®äœæ¥ãœãªã¥ãŒã·ã§ã³ã®ABAPãŸãã¯python-djangoã³ãŒãããã€ã³ããããDjangoãŸãã¯htmlãã³ãã¬ãŒãèšå®ããã€ã³ãããŸããã§ããããSAPãªã©ã®å€§èŠæš¡ã·ã¹ãã ã«æ¥ç¶ããã¢ãžã¥ãŒã«ã®äœæãé£ãããªãããšã瀺ãããã«SAP ERPãšã®çµ±åã«éäžããŸããDjangoã®ç 究ãçŽ4æ©å«ããå Žåãç§ã¯ãã®ãããªã·ã¹ãã ã«è¡ããŸããã
ãæž èŽããããšãããããŸããã建èšçãªæ¹å€ã«æè¬ããŸãã