2022年SBO中的一个极具震撼力的的流程控制功能详细分析.doc
SBO中的一个极具震撼力的的流程操纵功能详细分析 2007-05-28 19:32:43标签:SBO 流程操纵功能推送到技术圈 在我开发的工程过程中,许多客户和参谋向我提出了许许多多的功能需求。但我在分析研究了这些需求后发觉许多的需求我们参谋均能够处理。尤其是流程操纵方面的需求。我把这方面的一些粗浅看法整理出来,供大家分享。一、各种参谋在工程施行过程中出现过的看是需要研发处理的需求1、如何操纵不同的销售人员只能修正本人治理的客户的数据?2、如何操纵不同的销售人员只能录入修正本人的销售订单?3、如何给sbo的任何单据(我这里强调任何单据,包括销售订单,销售发货单、发票、采购订单、采购收货单、采购发票、财务凭证、库存转储等等)加上本人的逻辑验证操纵(例如不填某一个字段不用许sbo添加到数据库)4、如何在各种单据或主数据添加修正正程中加上本人想要的功能?往常这些需求一般都是参谋要求研发人员来参与协同工作来处理。我们如今要讨论的确实是这些咨询题统统不再研发,参谋可轻松搞定。所以这要求参谋要具备一些根底知识。二、参谋要处理这些咨询题要具备的根底知识1、sql的知识。我不断认为,一个ERP软件参谋高手对SQL必须的根本素养。他能够让你随心所欲从这个充满金矿的ERP数据海洋里找到你想要的金子。我认为有志于成为ERP软件参谋高手的朋友在此付出一点时间和金钱是绝对值得的!它是打开我们理解ERP软件内核的金钥匙,也是会让我们终生受益的一种技能。不管我们从事的是哪一个ERP系统的参谋工作!2、SBO对象的概念与规则。所以,我觉得您在读这篇杂论前要有坚持读下去的意志。尽管这好似是有点单调乏味。但这点乏味的知识会给您带来无穷的想象力!SBO的DI对象,针对参谋浅显点简单点说就像物料主数据、客户主数据、销售订单、采购订单等等这些SBO里的东东。他们在SBO系统里都有一个编号,就像我们都有一个名字一样用于唯一识别。例如物料主数据的编号是:4。详细清单如下:Member ValueoChartOfAccounts 1 oBusinessPartners 2oBanks 3oItems 4oVatGroups 5oPriceLists 6oSpecialPrices 7oItemProperties 8oUsers 12oInvoices 13oCreditNotes 14oDeliveryNotes 15oReturns 16oOrders 17oPurchaseInvoices 18oPurchaseCreditNotes 19oPurchaseDeliveryNotes 20oPurchaseReturns 21oPurchaseOrders 22oQuotations 23oIncomingPayments 24oJournalVouchers 28oJournalEntries 30oStockTakings 31oContacts 33oCreditCards 36oCurrencyCodes 37oPaymentTermsTypes 40oBankPages 42oManufacturers 43oVendorPayments 46oLandedCostsCodes 48oShippingTypes 49oLengthMeasures 50oWeightMeasures 51oItemGroups 52oSalesPersons 53oCustomsGroups 56oChecksforPayment 57oInventoryGenEntry 59oInventoryGenExit 60oWarehouses 64oCommissionGroups 65oProductTrees 66oStockTransfer 67oWorkOrders 68oCreditPaymentMethods 70oCreditCardPayments 71oAlternateCatNum 73oBudget 77oBudgetDistribution 78oMessages 81oBudgetScenarios 91oSalesOpportunities 97oUserDefaultGroups 93oSalesStages 101oActivityTypes 103oActivityLocations 104oDrafts 112oDeductionTaxHierarchies 116oDeductionTaxGroups 117oAdditionalExpenses 125oSalesTaxAuthorities 126oSalesTaxAuthoritiesTypes 127oSalesTaxCodes 128oQueryCategories 134oFactoringIndicators 138oPaymentsDrafts 140oAccountSegmentations 142oAccountSegmentationCategories 143oWarehouseLocations 144oForms1099 145oInventoryCycles 146oWizardPaymentMethods 147oBPPriorities 150oDunningLetters 151oUserFields 152oUserTables 153oPickLists 156oPaymentRunExport 158oUserQueries 160oMaterialRevaluation 162oCorrectionPurchaseInvoice 163oCorrectionPurchaseInvoiceReversal 164oCorrectionInvoice 165oCorrectionInvoiceReversal 166oContractTemplates 170oEmployeesInfo 171oCustomerEquipmentCards 176oWithholdingTaxCodes 178oBillOfExchangeTransactions 182oKnowledgeBaseSolutions 189oServiceContracts 190oServiceCalls 191oUserKeys 193oQueue 194oSalesForecast 198oTerritories 200oIndustries 201oProductionOrders 202oPackagesTypes 205oUserObjectsMD 206oTeams 211oRelationships 212oUserPermissionTree 214oActivityStatus 217oChooseFromList 218oFormattedSearches 219oAttachments2 221oUserLanguages 223oMultiLanguageTranslations 224oDynamicSystemStrings 229oHouseBankAccounts 231oBusinessPlaces 247oLocalEra 250oSalesTaxInvoice 280oPurchaseTaxInvoice 281BoRecordset 300BoBridge 305oNotaFiscalUsage 260oNotaFiscalCFOP 258oNotaFiscalCST 259oClosingDateProcedure 261oBusinessPartnerGroups 10oBPFiscalRegistryID 278三、关键的存储过程语法:大家打开sqlserver的查询分析器,打开SBO的一个公司数据库,查找一个存储过程:SBO_SP_TransactionNotification 它确实是让我们得以操纵SBO的魅力所在!ALTER proc SBO_SP_TransactionNotification object_type nvarchar(25), - SBO Object Typetransaction_type nchar(1), - Add, Update, Delete, Cancel, CLosenum_of_cols_in_key int,list_of_key_cols_tab_del nvarchar(255),list_of_cols_val_tab_del nvarchar(255)ASbegin- Return valuesdeclare error int - Result (0 for no error)declare error_message nvarchar (200) - Error string to be displayedselect error = 0select error_message = N'Ok'- ADD YOUR CODE HERE- Select the return valuesselect error, error_messageend这个存储过程的作用确实是任何一个SBO对象操作完程前都会调用它一次。以便我们参加我们的逻辑操纵来实现一些客户的特别要求。我们来看一下他的参数:第一个参数:object_type 这确实是我们上边讨论的SBO对象的编号。每一个对象执行Add, Update, Delete, Cancel, CLose操作时都会把操作的对象编号在这个参数中传入,我们只要推断该参数即可实现对不同的对象的不同的操纵。我后边会给大家提供一些练习。第二个参数:transaction_type nchar(1), - Add, Update, Delete, Cancel, CLose当在SBO系统中执行了添加操作,例如添加了一个物料主数据,object_type的值就等于4,transaction_type的值就等于'A' 。第三个参数:num_of_cols_in_key,对象关键字段的数目。例如物料主数据的关键字段是物料编码,他只有一个关键字,因此该值等于1。第四个参数:list_of_key_cols_tab_del 代表该对象的关键字段的字段名字,例如物料主数据确实是Itemcode,单据确实是Docentry.第五个参数:list_of_cols_val_tab_del 代表关键字段的值。这是特别重要的参数。我再次说明一点,通过我测试,SBO的对象再添加修正时会先在数据库里操作完成,然后调用该存储过程。因此我们就靠这个字段来作为验证操纵我们的逻辑的入口之一了。在以上介绍的五个参数之中,最重要的确实是object_type,transaction_type,list_of_cols_val_tab_del这三个参数。大家一定要明白他们的含义!内部的两个重要操纵参数:error ,好了,提醒了这么多,就数他最重要了。计算机世界的0和1就让他表达的淋漓尽致了。当我们给它赋值为零的时候,SBO的流程接着运转。一旦我们给他赋值为1,好了,效果出现了,你在sbo中操作的对象就再也不能完成它的操作了!牛!确实是这个牛的地点能够让我们拾掇SBO任何的对象,能够按客户的心花让SBO尽情的怒放。所以我们通过我们本人的逻辑,把 error =1,不然SBO按本人的逻辑接着下去了,总也得在SBO中给出个提示把,就像B1的状态栏的提示一样,那您就要动用error_message这个参数了。200个字符尽情地表述您的一肚子逻辑的解释吧,幽默也好,冷冰冰也罢!好了我们解释过了这个存储过程的架构,那我接下来看看它的威力。看看SBO的牛皮吹得力量能不能把鸡蛋吹成气球!四、几个小例子第一个例子:我们就测试一下物料主数据,并看一下这几个参数。在查询分析器打开该存储过程,让其处于编辑状态,要细心找,SBO的存储过程密密层层一大堆,看起来确实头疼,对一个参谋来说。但研发人员也许不如此认为。研发人员对代码的好奇心永远是无止境的。我就曾经把SBO的存储过程一个接一个的读了个遍。管他加密的不加密的。读了会有收获的!呵呵。也让咱看看SAP的牛人们使用什么样的代码来操作这个世界的企业用户的数据的!ALTER proc SBO_SP_TransactionNotification object_type nvarchar(25), - SBO Object Typetransaction_type nchar(1), - Add, Update, Delete, Cancel, CLosenum_of_cols_in_key int,list_of_key_cols_tab_del nvarchar(255),list_of_cols_val_tab_del nvarchar(255)ASbegin- Return valuesdeclare error int - Result (0 for no error)declare error_message nvarchar (200) - Error string to be displayeddeclare aaa nvarchar(100) -WLJ test select error = 0select error_message = N'Ok'- ADD YOUR CODE HEREif object_type='4'-itemsbeginif transaction_type='A' beginselect aaa =itemname from oitm where itemcode=list_of_cols_val_tab_del if aaa='Test'beginset error=1set error_message='物料主数据描绘不能等于Test!'+aaa +'-'+ list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endendelse if transaction_type='D'beginset error=1set error_message='不同意小小孩瞎删除!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endend- Select the return valuesselect error, error_messageend在这个例子里,我们首先对添加的物料主数据推断其描绘是否等于“Test”假如是,那就不让它添加,关于物料主数据则不同意删除。大家留意分析各参数的内容。我在这个例子里把各个参数的值也传递到SBO的音讯提示里边,如此大家学习分析方便!第二个例子:上边的例子我们测试验证了主数据,我们下边来看一下单据。ALTER proc SBO_SP_TransactionNotification object_type nvarchar(25), - SBO Object Typetransaction_type nchar(1), - Add, Update, Delete, Cancel, CLosenum_of_cols_in_key int,list_of_key_cols_tab_del nvarchar(255),list_of_cols_val_tab_del nvarchar(255)ASbegin- Return valuesdeclare error int - Result (0 for no error)declare error_message nvarchar (200) - Error string to be displayeddeclare aaa nvarchar(100) -WLJ test select error = 0select error_message = N'Ok'- ADD YOUR CODE HEREif object_type='17'-salseorderbeginif transaction_type='A'beginset error=1set error_message='添加出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endelse if transaction_type='U'beginset error=1set error_message='更新出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endend- Select the return valuesselect error, error_messageend所以这个例子我写得简单,只是测试在销售订单添加或更新的时候强不同意添加或更新。大家能够依照本人的逻辑来实际处理。我这里只是给大家提供一个思路。整合,所以我们实际工作中不可能只对一个对象操作,有可能对特别多对象同时验证,那就把上边的合起来即可,即能够对物料主数据操纵也能够对销售订单操纵。我给大家写了个小架构供大家参考使用。ALTER proc SBO_SP_TransactionNotification object_type nvarchar(25), - SBO Object Typetransaction_type nchar(1), - Add, Update, Delete, Cancel, CLosenum_of_cols_in_key int,list_of_key_cols_tab_del nvarchar(255),list_of_cols_val_tab_del nvarchar(255)ASbegin- Return valuesdeclare error int - Result (0 for no error)declare error_message nvarchar (200) - Error string to be displayedselect error = 0select error_message = N'Ok'declare aaa nvarchar(100)if object_type='2' -BusinessPartnersbeginif transaction_type='A'beginset error=1set error_message='添加出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endendelse if object_type='4'-itemsbeginif transaction_type='A' beginselect aaa =itemname from oitm where itemcode=list_of_cols_val_tab_del if aaa='Test'beginset error=1set error_message='添加出错提示!'+aaa +'-'+ list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endendelse if transaction_type='D'beginset error=1set error_message='更新出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endendelse if object_type='17'-salseorderbeginif transaction_type='A'beginset error=1set error_message='添加出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)endelse if transaction_type='U'beginset error=1set error_message='更新出错提示!' + list_of_key_cols_tab_del +'-'+list_of_cols_val_tab_del +'-'+cast(num_of_cols_in_key as nvarchar(20)end-else if object_type='17'-salseorder-begin-end-.-.end- Select the return valuesselect error, error_messageend五、完毕语。事实上这个功能也是我们业界的一个资深参谋给我的提示,由于在我们这个行业中有特别多擅长研究的参谋高手在这个市场里通过它淋漓尽致的在SBO里使展着无穷无尽的创意!在他们视力,没有不可能的事,只有不可能的人!每当面对这句话的时候,我对本人往常参谋提出的需求做出不可能的答复而感到汗颜与惭愧!