|
Koukal jsem na ten RoboForm ale na to co potřebuji je absolutně nevhodný. Abych přiznal, tak mám k dispozici nástroj na běžné vyplňování formulářů "RMA macro". Horší je, že mám k dipozici jen zkompilovaný spouštěcí soubor, který se odkazuje na script. Ani už nevím jak jsem se k němu dostal, ale tento exáč používáme již dva roky. Licence bude jen na straně tvůrce, což je náš zákazník. Takže mohu pracovat pouze s tím co je ve scriptu. Např. umí si načíst z excelu tabulku a hodnoty pak předávat do polí stránek. K identifikaci polí používá, souřadnice obrazovky nebo porovnáním obrázku např. tlačítka a nebo se k prvku dostane pomocí simulací kliku kláves. Umí dokonce pracovat s IF THEN ELSE a cykly. Jenže tohle vše funguje na předem daný resp. známý počet prvků. Tzn. vím, že se jedná o jednu zakázku, která bude obsahovat jasně stanovený počet informací k vyplnění. Teď ale potřebuji, aby ten script vyplňoval tabulku kde předem není znám počet záznamů. Tzn., že potřebuji identifikovat, zda se při dalším posunu pomocí TAB dostane kurzor na další záznam nebo zda skočí na button "Save". K tomu ale potřebuji zpětnou vazbu od prohlížeče. A to jsem v dostupném scriptu nenalezl. Možná si řeknete, proč identifikovat pole, když by se dal využít cyklus procházení vztažných prvků uložených v excelu a po jejím ukončení ukončit i vyplňování ? Jenže v tomto případě je to tak, že si potřebuji doplnit v každém záznamu jen jeden určitý údaj který naleznu v excelovské tabulce, takže cyklus tady nepomůže. Proto uvažuji jestli by pro řešení nebylo jednodušší si tu aplikaci napsat ve VB.net než nadále hledat možnosti toho scriptu. Vím, že simulace stisku kláves asi nebude problém a něco o tom najdu i tady, ale mě by v prní řadě zajímalo, jestli existuje možnost pro "amaterského lovce kódu", tedy mě, lehce identifikovat na kterém controls se na stránce s kurzorem právě nálezám, případně zda jsem schopen načíst i jeho obsah. Možná že už to rozebírám moc do podrobna, ale poraďte alespoň všeobecně. Pro zajímovost posílám jak takový script vypadá
//Keyboard initialize
CapsOff
NumOff
ScrollOff
//End of keyboard initialize
//Counter initialize
Let>putaway_order_count=0
Let>error_order_count=0
Let>putaway_done_count=0
//End of counter initialize
//Check which line to start from in Excel file
Let>file_name=PA_Macro.xls
Let>initial_row=2
Repeat>col_c_value
DDERequest>Excel,file_name,R%initial_row%C3,col_c_value,30
StringReplace>col_c_value,CRLF,,col_c_value
Let>initial_row=initial_row+1
Until>col_c_value=
Let>starting_row=initial_row-1
//End of check which line to start from in Excel file
//Check if initial row is a null
Let>col_a_init_value=
DDERequest>Excel,file_name,R%starting_row%C1,col_a_init_value,30
StringReplace>col_a_init_value,CRLF,,col_a_init_value
If>col_a_init_value=
Goto>End_And_Show_Message
EndIf
//End of check if initial row is a null
//Process starts...
//Set focus to SeLECT window
SetFocus>SeLECT - Microsoft Internet Explorer
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\initialize.bmp,1
Wait>0.1
//End set focus to SeLECT window
//Repeat function to loop till end of Excel file
Repeat>col_a_value
//Error check initialize
Let>error_1=0
Let>error_2=0
Let>error_3=0
//End of error check initialize
//Search for order...
//First screen
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\inbound.bmp,SCREEN,1,1,XArr,YArr,inbound
If>inbound=1
MouseMove>XArr_0,YArr_0
LClick
EndIf
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_console.bmp,1
Wait>0.1
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\inbound_order_console.bmp,SCREEN,1,1,XArr,YArr,inbound_order_console
If>inbound_order_console=1
MouseMove>XArr_0,YArr_0
LClick
EndIf
Wait>0.5
//Second screen with refresh check
Let>refresh_check=0
Repeat>refresh_check
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\help.bmp,SCREEN,1,1,XArr,YArr,help
If>help=1
Let>refresh_check=0
Wait>0.1
EndIf
If>help=0
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order.bmp,1
Let>refresh_check=1
EndIf
Wait>0.1
Until>refresh_check=1
//Click on the order...
Wait>0.1
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=17
DDERequest>Excel,file_name,R%starting_row%C1,flowtag_value,30
StringReplace>flowtag_value,CRLF,,flowtag_value
Send Character/Text>%flowtag_value%
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=15
Wait>0.1
Press Right
Wait>0.1
Press Enter
//Third screen & iDoc error check
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_list.bmp,1
Wait>0.1
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\no_records_buttons.bmp,SCREEN,1,1,XArr,YArr,retrieved_records
If>retrieved_records=1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_list.bmp,1
Let>error_1=2
Goto>Record_Not_Found
Else
If>retrieved_records=0
Let>error_1=1
Goto>Record_Found
Else
MessageModal>Error!
Goto>The_End
EndIf
EndIf
//End of search for order
//If the order does not exist...
Label>Record_Not_Found
If>error_1=2
DDEPoke>Excel,file_name,R%starting_row%C3,Order Not Found
GetDate>today_date
GetTime>now_time
Let>this_moment=%today_date%, %now_time%
DDEPoke>Excel,file_name,R%starting_row%C4,this_moment
Let>error_order_count=error_order_count+1
GoTo>Go_To_Next_Row
EndIf
//End of if order does not exist
//If order exists...
Label>Record_Found
If>error_1=1
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=6
Press Enter
//If order exists check if receiving or putaway has already been done...
Label>inbound_screen_check
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_detail.bmp,1
Let>screen_check=0
Repeat>screen_check
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\receive_not_done.bmp,SCREEN,1,1,XArr,YArr,receive_not_done
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\receipt_done.bmp,SCREEN,1,1,XArr,YArr,receipt_done
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\put_away_done.bmp,SCREEN,1,1,XArr,YArr,put_away_done
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\receive.bmp,SCREEN,1,1,XArr,YArr,receive
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\receive_disabled.bmp,SCREEN,1,1,XArr,YArr,receive_disabled
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\put_away.bmp,SCREEN,1,1,XArr,YArr,put_away
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\put_away_disabled.bmp,SCREEN,1,1,XArr,YArr,put_away_disabled
If>{(%receive_not_done%=1) AND (%receive%=1) AND (%put_away_disabled%=1)}
Wait>0.1
Let>screen_check=1
Let>error_2=1
Let>error_3=1
Goto>Receipt_Not_Done
Else
If>{(%receipt_done%=1) AND (%receive_disabled%=1) AND (%put_away%=1)}
Wait>0.1
Let>screen_check=1
Let>error_2=2
Let>error_3=1
Goto>PutAway_Not_Done
Else
If>{(%put_away_done%=1) AND (%receive_disabled%=1) AND (%put_away_disabled%=1)}
Wait>0.1
Let>screen_check=1
Let>error_2=2
Let>error_3=2
Goto>PutAway_Done
Else
Let>screen_check=0
EndIf
EndIf
EndIf
Until>screen_check=1
//End of if order exists check if putaway has already been done
//If receive not done...
Label>Receipt_Not_Done
If>{(%error_2%=1) AND (%error_3%=1)}
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\receive.bmp,SCREEN,1,1,XArr,YArr,receive
If>receive=1
MouseMove>XArr_0,YArr_0
LClick
EndIf
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\receive_title.bmp,1
Wait>0.1
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=2
Press Enter
Let>error_2=0
Let>error_3=0
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_detail.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\receipt_done.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\receive_disabled.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\put_away.bmp,1
Goto>inbound_screen_check
EndIf
//End of if receive not done
//If putaway not done...
Label>PutAway_Not_Done
If>{(%error_2%=2) AND (%error_3%=1)}
Let>checkpoint_1=0
Let>checkpoint_2=0
Let>checkpoint_3=0
FindImagePos>C:\Macros\Receive & PutAway Macro\Images\put_away.bmp,SCREEN,1,1,XArr,YArr,put_away
If>put_away=1
MouseMove>XArr_0,YArr_0
LClick
EndIf
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\complete_tasks.bmp,1
Let>checkpoint_1=1
Wait>0.1
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=8
DDERequest>Excel,file_name,R%starting_row%C2,target_loc,30
Send Character/Text>%target_loc%
Let>press_tab=0
Repeat>press_tab
Press Tab
Let>press_tab=press_tab+1
Wait>0.1
Until>press_tab=3
Press Enter
Let>checkpoint_2=1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\inbound_order_detail.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\put_away_done.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\receive_disabled.bmp,1
WaitScreenImage>C:\Macros\Receive & PutAway Macro\Images\put_away_disabled.bmp,1
Wait>0.1
Let>checkpoint_3=1
If>{(%checkpoint_1%=1) AND (%checkpoint_2%=1) AND (%checkpoint_3%=1)}
DDEPoke>Excel,file_name,R%starting_row%C3,Completed
GetDate>today_date
GetTime>now_time
Let>this_moment=%today_date%, %now_time%
DDEPoke>Excel,file_name,R%starting_row%C4,this_moment
Let>putaway_order_count=putaway_order_count+1
Else
MessageModal>Error! PutAway Steps Were Not Completed!
Goto>End_And_Show_Message
EndIf
EndIf
EndIf
//End of if putaway not done
//If putaway has already been done...
Label>PutAway_Done
If>{(%error_2%=2) AND (%error_3%=2)}
DDEPoke>Excel,file_name,R%starting_row%C3,PutAway Already Done Previously
GetDate>today_date
GetTime>now_time
Let>this_moment=%today_date%, %now_time%
DDEPoke>Excel,file_name,R%starting_row%C4,this_moment
Let putaway_done_count=putaway_done_count+1
EndIf
//End of if putaway has already been done
EndIf
//End of if order exists
//Go to next row
Label>Go_To_Next_Row
Let>starting_row=starting_row+1
DDERequest>Excel,file_name,R%starting_row%C1,col_a_value,30
StringReplace>col_a_value,CRLF,,col_a_value
//End go to next row
//2nd error check initialize
Let>error_1=0
Let>error_2=0
Let>error_3=0
//End 2nd of error check initialize
Until>col_a_value=
//End of repeat function to loop till end of Excel file
//Display completion confirmation and details
Label>End_And_Show_Message
Let>MSG_STAYONTOP=1
Let>MSG_CENTERED=1
SetFocus>Microsoft Excel - PA_Macro.xls
Wait>3
Press CTRL
Send Character/Text>S
Release CTRL
Wait>0.5
MessageModal>Completed! %putaway_order_count% order(s) were put away successfully, %putaway_done_count% order(s) have already been put away & %error_order_count% order(s) could not be found.
//End of display confirmation and details
Label>The_End
//Done!
|