smart.p 254 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12
  2. &ANALYZE-RESUME
  3. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  4. /*********************************************************************
  5. * Copyright (C) 2005-2008 by Progress Software Corporation. All *
  6. * rights reserved. Prior versions of this work may contain portions *
  7. * contributed by participants of Possenet. *
  8. * *
  9. *********************************************************************/
  10. /*--------------------------------------------------------------------------
  11. File : smart.p
  12. Purpose : General Super Procedure for New ADM applications
  13. Syntax : adm2/smart.p
  14. Modified : July 31, 2000 Version 9.1B
  15. ------------------------------------------------------------------------*/
  16. /* This .p file was created with the Progress UIB. */
  17. /*----------------------------------------------------------------------*/
  18. /* *************************** Definitions ************************** */
  19. /* Tell smrtattr.i that this is the Super Procedure */
  20. &SCOP ADMSuper smart.p
  21. {src/adm2/custom/smartexclcustom.i}
  22. /* Define and initialize variables for properties shared by all objects. */
  23. DEFINE VARIABLE scPassThroughLinks AS CHARACTER NO-UNDO
  24. INIT "Data;multiple,Update;single,Filter;single,OutMessage;single,Navigation;single,Commit;single":U.
  25. DEFINE VARIABLE scCircularLinks AS CHARACTER NO-UNDO
  26. INIT "Data":U.
  27. DEFINE VARIABLE gcDataMessages AS CHARACTER NO-UNDO INIT "":U.
  28. DEFINE VARIABLE glManageReadErrors AS LOGICAL NO-UNDO.
  29. DEFINE TEMP-TABLE ADMLink NO-UNDO
  30. FIELD LinkSource AS HANDLE
  31. FIELD LinkTarget AS HANDLE
  32. FIELD LinkType AS CHARACTER.
  33. /* Class property */
  34. DEFINE VARIABLE glIsCrystalInstalled AS LOGICAL INIT ? NO-UNDO.
  35. DEFINE VARIABLE glIcfIsRunning AS LOGICAL INITIAL ? NO-UNDO.
  36. def var gcMessageBoxType as character initial ? no-undo.
  37. /* _UIB-CODE-BLOCK-END */
  38. &ANALYZE-RESUME
  39. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  40. /* ******************** Preprocessor Definitions ******************** */
  41. &Scoped-define PROCEDURE-TYPE Procedure
  42. &Scoped-define DB-AWARE no
  43. /* _UIB-PREPROCESSOR-BLOCK-END */
  44. &ANALYZE-RESUME
  45. /* ************************ Function Prototypes ********************** */
  46. &IF DEFINED(EXCLUDE-anyMessage) = 0 &THEN
  47. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD anyMessage Procedure
  48. FUNCTION anyMessage RETURNS LOGICAL
  49. ( ) FORWARD.
  50. /* _UIB-CODE-BLOCK-END */
  51. &ANALYZE-RESUME
  52. &ENDIF
  53. &IF DEFINED(EXCLUDE-applyFocus) = 0 &THEN
  54. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD applyFocus Procedure
  55. FUNCTION applyFocus RETURNS LOGICAL
  56. ( pcField AS CHAR ) FORWARD.
  57. /* _UIB-CODE-BLOCK-END */
  58. &ANALYZE-RESUME
  59. &ENDIF
  60. &IF DEFINED(EXCLUDE-applyFocusToFrame) = 0 &THEN
  61. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD applyFocusToFrame Procedure
  62. FUNCTION applyFocusToFrame RETURNS LOGICAL
  63. ( phFrame AS HANDLE,
  64. pcField AS CHAR,
  65. pcFrameList AS CHAR,
  66. pcObjectList AS CHAR ) FORWARD.
  67. /* _UIB-CODE-BLOCK-END */
  68. &ANALYZE-RESUME
  69. &ENDIF
  70. &IF DEFINED(EXCLUDE-assignBufferValueFromReference) = 0 &THEN
  71. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignBufferValueFromReference Procedure
  72. FUNCTION assignBufferValueFromReference RETURNS CHARACTER
  73. (phBufferField AS HANDLE,
  74. pcReference AS CHAR) FORWARD.
  75. /* _UIB-CODE-BLOCK-END */
  76. &ANALYZE-RESUME
  77. &ENDIF
  78. &IF DEFINED(EXCLUDE-assignLinkProperty) = 0 &THEN
  79. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignLinkProperty Procedure
  80. FUNCTION assignLinkProperty RETURNS LOGICAL
  81. ( pcLink AS CHARACTER, pcPropName AS CHARACTER, pcPropValue AS CHARACTER ) FORWARD.
  82. /* _UIB-CODE-BLOCK-END */
  83. &ANALYZE-RESUME
  84. &ENDIF
  85. &IF DEFINED(EXCLUDE-assignMappedEntry) = 0 &THEN
  86. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignMappedEntry Procedure
  87. FUNCTION assignMappedEntry RETURNS CHARACTER
  88. (pcEntryNames AS CHAR,
  89. pcList AS CHAR,
  90. pcEntryValues AS CHAR,
  91. pcDelimiter AS CHAR,
  92. plFirst AS LOG) FORWARD.
  93. /* _UIB-CODE-BLOCK-END */
  94. &ANALYZE-RESUME
  95. &ENDIF
  96. &IF DEFINED(EXCLUDE-assignTargetLinkState) = 0 &THEN
  97. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignTargetLinkState Procedure
  98. FUNCTION assignTargetLinkState RETURNS LOGICAL
  99. ( pcLinkType as char,
  100. plActive as logical,
  101. plQueryObject as logical ) FORWARD.
  102. /* _UIB-CODE-BLOCK-END */
  103. &ANALYZE-RESUME
  104. &ENDIF
  105. &IF DEFINED(EXCLUDE-changeLinkState) = 0 &THEN
  106. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD changeLinkState Procedure
  107. FUNCTION changeLinkState RETURNS LOGICAL
  108. ( pcState AS CHAR,
  109. pcLink AS CHAR,
  110. phObject AS HANDLE) FORWARD.
  111. /* _UIB-CODE-BLOCK-END */
  112. &ANALYZE-RESUME
  113. &ENDIF
  114. &IF DEFINED(EXCLUDE-clearCombo) = 0 &THEN
  115. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD clearCombo Procedure
  116. FUNCTION clearCombo RETURNS LOGICAL
  117. ( phField AS HANDLE ) FORWARD.
  118. /* _UIB-CODE-BLOCK-END */
  119. &ANALYZE-RESUME
  120. &ENDIF
  121. &IF DEFINED(EXCLUDE-deleteEntry) = 0 &THEN
  122. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD deleteEntry Procedure
  123. FUNCTION deleteEntry RETURNS CHARACTER
  124. ( piEntry AS INTEGER,
  125. pcString AS CHARACTER,
  126. pcDelim AS CHARACTER ) FORWARD.
  127. /* _UIB-CODE-BLOCK-END */
  128. &ANALYZE-RESUME
  129. &ENDIF
  130. &IF DEFINED(EXCLUDE-deleteProperties) = 0 &THEN
  131. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD deleteProperties Procedure
  132. FUNCTION deleteProperties RETURNS LOGICAL ( ) FORWARD.
  133. /* _UIB-CODE-BLOCK-END */
  134. &ANALYZE-RESUME
  135. &ENDIF
  136. &IF DEFINED(EXCLUDE-fetchMessages) = 0 &THEN
  137. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD fetchMessages Procedure
  138. FUNCTION fetchMessages RETURNS CHARACTER
  139. ( ) FORWARD.
  140. /* _UIB-CODE-BLOCK-END */
  141. &ANALYZE-RESUME
  142. &ENDIF
  143. &IF DEFINED(EXCLUDE-getChildDataKey) = 0 &THEN
  144. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getChildDataKey Procedure
  145. FUNCTION getChildDataKey RETURNS CHARACTER
  146. ( /* parameter-definitions */ ) FORWARD.
  147. /* _UIB-CODE-BLOCK-END */
  148. &ANALYZE-RESUME
  149. &ENDIF
  150. &IF DEFINED(EXCLUDE-getClassName) = 0 &THEN
  151. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getClassName Procedure
  152. FUNCTION getClassName RETURNS CHARACTER
  153. ( ) FORWARD.
  154. /* _UIB-CODE-BLOCK-END */
  155. &ANALYZE-RESUME
  156. &ENDIF
  157. &IF DEFINED(EXCLUDE-getContainerHandle) = 0 &THEN
  158. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerHandle Procedure
  159. FUNCTION getContainerHandle RETURNS HANDLE
  160. ( ) FORWARD.
  161. /* _UIB-CODE-BLOCK-END */
  162. &ANALYZE-RESUME
  163. &ENDIF
  164. &IF DEFINED(EXCLUDE-getContainerHidden) = 0 &THEN
  165. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerHidden Procedure
  166. FUNCTION getContainerHidden RETURNS LOGICAL
  167. ( ) FORWARD.
  168. /* _UIB-CODE-BLOCK-END */
  169. &ANALYZE-RESUME
  170. &ENDIF
  171. &IF DEFINED(EXCLUDE-getContainerSource) = 0 &THEN
  172. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerSource Procedure
  173. FUNCTION getContainerSource RETURNS HANDLE
  174. ( ) FORWARD.
  175. /* _UIB-CODE-BLOCK-END */
  176. &ANALYZE-RESUME
  177. &ENDIF
  178. &IF DEFINED(EXCLUDE-getContainerSourceEvents) = 0 &THEN
  179. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerSourceEvents Procedure
  180. FUNCTION getContainerSourceEvents RETURNS CHARACTER
  181. ( ) FORWARD.
  182. /* _UIB-CODE-BLOCK-END */
  183. &ANALYZE-RESUME
  184. &ENDIF
  185. &IF DEFINED(EXCLUDE-getContainerType) = 0 &THEN
  186. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerType Procedure
  187. FUNCTION getContainerType RETURNS CHARACTER
  188. ( ) FORWARD.
  189. /* _UIB-CODE-BLOCK-END */
  190. &ANALYZE-RESUME
  191. &ENDIF
  192. &IF DEFINED(EXCLUDE-getDataLinksEnabled) = 0 &THEN
  193. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataLinksEnabled Procedure
  194. FUNCTION getDataLinksEnabled RETURNS LOGICAL
  195. ( ) FORWARD.
  196. /* _UIB-CODE-BLOCK-END */
  197. &ANALYZE-RESUME
  198. &ENDIF
  199. &IF DEFINED(EXCLUDE-getDataSource) = 0 &THEN
  200. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataSource Procedure
  201. FUNCTION getDataSource RETURNS HANDLE
  202. ( ) FORWARD.
  203. /* _UIB-CODE-BLOCK-END */
  204. &ANALYZE-RESUME
  205. &ENDIF
  206. &IF DEFINED(EXCLUDE-getDataSourceEvents) = 0 &THEN
  207. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataSourceEvents Procedure
  208. FUNCTION getDataSourceEvents RETURNS CHARACTER
  209. ( ) FORWARD.
  210. /* _UIB-CODE-BLOCK-END */
  211. &ANALYZE-RESUME
  212. &ENDIF
  213. &IF DEFINED(EXCLUDE-getDataSourceNames) = 0 &THEN
  214. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataSourceNames Procedure
  215. FUNCTION getDataSourceNames RETURNS CHARACTER
  216. ( ) FORWARD.
  217. /* _UIB-CODE-BLOCK-END */
  218. &ANALYZE-RESUME
  219. &ENDIF
  220. &IF DEFINED(EXCLUDE-getDataTarget) = 0 &THEN
  221. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataTarget Procedure
  222. FUNCTION getDataTarget RETURNS CHARACTER
  223. ( ) FORWARD.
  224. /* _UIB-CODE-BLOCK-END */
  225. &ANALYZE-RESUME
  226. &ENDIF
  227. &IF DEFINED(EXCLUDE-getDataTargetEvents) = 0 &THEN
  228. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDataTargetEvents Procedure
  229. FUNCTION getDataTargetEvents RETURNS CHARACTER
  230. ( ) FORWARD.
  231. /* _UIB-CODE-BLOCK-END */
  232. &ANALYZE-RESUME
  233. &ENDIF
  234. &IF DEFINED(EXCLUDE-getDBAware) = 0 &THEN
  235. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDBAware Procedure
  236. FUNCTION getDBAware RETURNS LOGICAL
  237. ( ) FORWARD.
  238. /* _UIB-CODE-BLOCK-END */
  239. &ANALYZE-RESUME
  240. &ENDIF
  241. &IF DEFINED(EXCLUDE-getDesignDataObject) = 0 &THEN
  242. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDesignDataObject Procedure
  243. FUNCTION getDesignDataObject RETURNS CHARACTER
  244. ( ) FORWARD.
  245. /* _UIB-CODE-BLOCK-END */
  246. &ANALYZE-RESUME
  247. &ENDIF
  248. &IF DEFINED(EXCLUDE-getDynamicObject) = 0 &THEN
  249. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDynamicObject Procedure
  250. FUNCTION getDynamicObject RETURNS LOGICAL
  251. ( /* parameter-definitions */ ) FORWARD.
  252. /* _UIB-CODE-BLOCK-END */
  253. &ANALYZE-RESUME
  254. &ENDIF
  255. &IF DEFINED(EXCLUDE-getHideOnInit) = 0 &THEN
  256. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getHideOnInit Procedure
  257. FUNCTION getHideOnInit RETURNS LOGICAL
  258. ( ) FORWARD.
  259. /* _UIB-CODE-BLOCK-END */
  260. &ANALYZE-RESUME
  261. &ENDIF
  262. &IF DEFINED(EXCLUDE-getInactiveLinks) = 0 &THEN
  263. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getInactiveLinks Procedure
  264. FUNCTION getInactiveLinks RETURNS CHARACTER
  265. ( /* parameter-definitions */ ) FORWARD.
  266. /* _UIB-CODE-BLOCK-END */
  267. &ANALYZE-RESUME
  268. &ENDIF
  269. &IF DEFINED(EXCLUDE-getInstanceId) = 0 &THEN
  270. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getInstanceId Procedure
  271. FUNCTION getInstanceId RETURNS DECIMAL
  272. ( /* parameter-definitions */ ) FORWARD.
  273. /* _UIB-CODE-BLOCK-END */
  274. &ANALYZE-RESUME
  275. &ENDIF
  276. &IF DEFINED(EXCLUDE-getInstanceProperties) = 0 &THEN
  277. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getInstanceProperties Procedure
  278. FUNCTION getInstanceProperties RETURNS CHARACTER
  279. ( ) FORWARD.
  280. /* _UIB-CODE-BLOCK-END */
  281. &ANALYZE-RESUME
  282. &ENDIF
  283. &IF DEFINED(EXCLUDE-getIsCrystalInstalled) = 0 &THEN
  284. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getIsCrystalInstalled Procedure
  285. FUNCTION getIsCrystalInstalled RETURNS LOGICAL
  286. ( /* parameter-definitions */ ) FORWARD.
  287. /* _UIB-CODE-BLOCK-END */
  288. &ANALYZE-RESUME
  289. &ENDIF
  290. &IF DEFINED(EXCLUDE-getLabel) = 0 &THEN
  291. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLabel Procedure
  292. FUNCTION getLabel RETURNS CHARACTER
  293. ( ) FORWARD.
  294. /* _UIB-CODE-BLOCK-END */
  295. &ANALYZE-RESUME
  296. &ENDIF
  297. &IF DEFINED(EXCLUDE-getLayoutPosition) = 0 &THEN
  298. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLayoutPosition Procedure
  299. FUNCTION getLayoutPosition RETURNS CHARACTER
  300. ( ) FORWARD.
  301. /* _UIB-CODE-BLOCK-END */
  302. &ANALYZE-RESUME
  303. &ENDIF
  304. &IF DEFINED(EXCLUDE-getLogicalObjectName) = 0 &THEN
  305. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLogicalObjectName Procedure
  306. FUNCTION getLogicalObjectName RETURNS CHARACTER
  307. ( /* parameter-definitions */ ) FORWARD.
  308. /* _UIB-CODE-BLOCK-END */
  309. &ANALYZE-RESUME
  310. &ENDIF
  311. &IF DEFINED(EXCLUDE-getLogicalVersion) = 0 &THEN
  312. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLogicalVersion Procedure
  313. FUNCTION getLogicalVersion RETURNS CHARACTER
  314. ( /* parameter-definitions */ ) FORWARD.
  315. /* _UIB-CODE-BLOCK-END */
  316. &ANALYZE-RESUME
  317. &ENDIF
  318. &IF DEFINED(EXCLUDE-getManageReadErrors) = 0 &THEN
  319. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getManageReadErrors Procedure
  320. FUNCTION getManageReadErrors RETURNS LOGICAL
  321. ( ) FORWARD.
  322. /* _UIB-CODE-BLOCK-END */
  323. &ANALYZE-RESUME
  324. &ENDIF
  325. &IF DEFINED(EXCLUDE-getManagerHandle) = 0 &THEN
  326. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getManagerHandle Procedure
  327. FUNCTION getManagerHandle RETURNS HANDLE
  328. ( pcManager AS CHAR ) FORWARD.
  329. /* _UIB-CODE-BLOCK-END */
  330. &ANALYZE-RESUME
  331. &ENDIF
  332. &IF DEFINED(EXCLUDE-getMessageBoxType) = 0 &THEN
  333. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMessageBoxType Procedure
  334. FUNCTION getMessageBoxType RETURNS CHARACTER
  335. ( /* parameter-definitions */ ) FORWARD.
  336. /* _UIB-CODE-BLOCK-END */
  337. &ANALYZE-RESUME
  338. &ENDIF
  339. &IF DEFINED(EXCLUDE-getObjectHidden) = 0 &THEN
  340. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectHidden Procedure
  341. FUNCTION getObjectHidden RETURNS LOGICAL
  342. ( ) FORWARD.
  343. /* _UIB-CODE-BLOCK-END */
  344. &ANALYZE-RESUME
  345. &ENDIF
  346. &IF DEFINED(EXCLUDE-getObjectInitialized) = 0 &THEN
  347. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectInitialized Procedure
  348. FUNCTION getObjectInitialized RETURNS LOGICAL
  349. ( ) FORWARD.
  350. /* _UIB-CODE-BLOCK-END */
  351. &ANALYZE-RESUME
  352. &ENDIF
  353. &IF DEFINED(EXCLUDE-getObjectName) = 0 &THEN
  354. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectName Procedure
  355. FUNCTION getObjectName RETURNS CHARACTER
  356. ( ) FORWARD.
  357. /* _UIB-CODE-BLOCK-END */
  358. &ANALYZE-RESUME
  359. &ENDIF
  360. &IF DEFINED(EXCLUDE-getObjectPage) = 0 &THEN
  361. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectPage Procedure
  362. FUNCTION getObjectPage RETURNS INTEGER
  363. ( ) FORWARD.
  364. /* _UIB-CODE-BLOCK-END */
  365. &ANALYZE-RESUME
  366. &ENDIF
  367. &IF DEFINED(EXCLUDE-getObjectParent) = 0 &THEN
  368. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectParent Procedure
  369. FUNCTION getObjectParent RETURNS HANDLE
  370. ( ) FORWARD.
  371. /* _UIB-CODE-BLOCK-END */
  372. &ANALYZE-RESUME
  373. &ENDIF
  374. &IF DEFINED(EXCLUDE-getObjectsCreated) = 0 &THEN
  375. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectsCreated Procedure
  376. FUNCTION getObjectsCreated RETURNS LOGICAL
  377. ( ) FORWARD.
  378. /* _UIB-CODE-BLOCK-END */
  379. &ANALYZE-RESUME
  380. &ENDIF
  381. &IF DEFINED(EXCLUDE-getObjectVersion) = 0 &THEN
  382. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getObjectVersion Procedure
  383. FUNCTION getObjectVersion RETURNS CHARACTER
  384. ( ) FORWARD.
  385. /* _UIB-CODE-BLOCK-END */
  386. &ANALYZE-RESUME
  387. &ENDIF
  388. &IF DEFINED(EXCLUDE-getParentDataKey) = 0 &THEN
  389. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getParentDataKey Procedure
  390. FUNCTION getParentDataKey RETURNS CHARACTER
  391. ( /* parameter-definitions */ ) FORWARD.
  392. /* _UIB-CODE-BLOCK-END */
  393. &ANALYZE-RESUME
  394. &ENDIF
  395. &IF DEFINED(EXCLUDE-getPassThroughLinks) = 0 &THEN
  396. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPassThroughLinks Procedure
  397. FUNCTION getPassThroughLinks RETURNS CHARACTER
  398. ( ) FORWARD.
  399. /* _UIB-CODE-BLOCK-END */
  400. &ANALYZE-RESUME
  401. &ENDIF
  402. &IF DEFINED(EXCLUDE-getPhysicalObjectName) = 0 &THEN
  403. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPhysicalObjectName Procedure
  404. FUNCTION getPhysicalObjectName RETURNS CHARACTER
  405. ( /* parameter-definitions */ ) FORWARD.
  406. /* _UIB-CODE-BLOCK-END */
  407. &ANALYZE-RESUME
  408. &ENDIF
  409. &IF DEFINED(EXCLUDE-getPhysicalVersion) = 0 &THEN
  410. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPhysicalVersion Procedure
  411. FUNCTION getPhysicalVersion RETURNS CHARACTER
  412. ( /* parameter-definitions */ ) FORWARD.
  413. /* _UIB-CODE-BLOCK-END */
  414. &ANALYZE-RESUME
  415. &ENDIF
  416. &IF DEFINED(EXCLUDE-getPropertyDialog) = 0 &THEN
  417. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPropertyDialog Procedure
  418. FUNCTION getPropertyDialog RETURNS CHARACTER
  419. ( ) FORWARD.
  420. /* _UIB-CODE-BLOCK-END */
  421. &ANALYZE-RESUME
  422. &ENDIF
  423. &IF DEFINED(EXCLUDE-getQueryObject) = 0 &THEN
  424. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getQueryObject Procedure
  425. FUNCTION getQueryObject RETURNS LOGICAL
  426. ( ) FORWARD.
  427. /* _UIB-CODE-BLOCK-END */
  428. &ANALYZE-RESUME
  429. &ENDIF
  430. &IF DEFINED(EXCLUDE-getRenderingProcedure) = 0 &THEN
  431. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getRenderingProcedure Procedure
  432. FUNCTION getRenderingProcedure RETURNS CHARACTER
  433. ( /* parameter-definitions */ ) FORWARD.
  434. /* _UIB-CODE-BLOCK-END */
  435. &ANALYZE-RESUME
  436. &ENDIF
  437. &IF DEFINED(EXCLUDE-getRunAttribute) = 0 &THEN
  438. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getRunAttribute Procedure
  439. FUNCTION getRunAttribute RETURNS CHARACTER
  440. ( /* parameter-definitions */ ) FORWARD.
  441. /* _UIB-CODE-BLOCK-END */
  442. &ANALYZE-RESUME
  443. &ENDIF
  444. &IF DEFINED(EXCLUDE-getServiceAdapterName) = 0 &THEN
  445. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getServiceAdapterName Procedure
  446. FUNCTION getServiceAdapterName RETURNS CHARACTER
  447. ( ) FORWARD.
  448. /* _UIB-CODE-BLOCK-END */
  449. &ANALYZE-RESUME
  450. &ENDIF
  451. &IF DEFINED(EXCLUDE-getSuperProcedure) = 0 &THEN
  452. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSuperProcedure Procedure
  453. FUNCTION getSuperProcedure RETURNS CHARACTER
  454. ( ) FORWARD.
  455. /* _UIB-CODE-BLOCK-END */
  456. &ANALYZE-RESUME
  457. &ENDIF
  458. &IF DEFINED(EXCLUDE-getSuperProcedureHandle) = 0 &THEN
  459. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSuperProcedureHandle Procedure
  460. FUNCTION getSuperProcedureHandle RETURNS CHARACTER
  461. ( ) FORWARD.
  462. /* _UIB-CODE-BLOCK-END */
  463. &ANALYZE-RESUME
  464. &ENDIF
  465. &IF DEFINED(EXCLUDE-getSuperProcedureMode) = 0 &THEN
  466. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSuperProcedureMode Procedure
  467. FUNCTION getSuperProcedureMode RETURNS CHARACTER
  468. ( ) FORWARD.
  469. /* _UIB-CODE-BLOCK-END */
  470. &ANALYZE-RESUME
  471. &ENDIF
  472. &IF DEFINED(EXCLUDE-getSupportedLinks) = 0 &THEN
  473. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSupportedLinks Procedure
  474. FUNCTION getSupportedLinks RETURNS CHARACTER
  475. ( ) FORWARD.
  476. /* _UIB-CODE-BLOCK-END */
  477. &ANALYZE-RESUME
  478. &ENDIF
  479. &IF DEFINED(EXCLUDE-getThinRenderingProcedure) = 0 &THEN
  480. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getThinRenderingProcedure Procedure
  481. FUNCTION getThinRenderingProcedure RETURNS CHARACTER
  482. ( /* parameter-definitions */ ) FORWARD.
  483. /* _UIB-CODE-BLOCK-END */
  484. &ANALYZE-RESUME
  485. &ENDIF
  486. &IF DEFINED(EXCLUDE-getTranslatableProperties) = 0 &THEN
  487. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTranslatableProperties Procedure
  488. FUNCTION getTranslatableProperties RETURNS CHARACTER
  489. ( ) FORWARD.
  490. /* _UIB-CODE-BLOCK-END */
  491. &ANALYZE-RESUME
  492. &ENDIF
  493. &IF DEFINED(EXCLUDE-getUIBMode) = 0 &THEN
  494. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getUIBMode Procedure
  495. FUNCTION getUIBMode RETURNS CHARACTER
  496. ( ) FORWARD.
  497. /* _UIB-CODE-BLOCK-END */
  498. &ANALYZE-RESUME
  499. &ENDIF
  500. &IF DEFINED(EXCLUDE-getUseRepository) = 0 &THEN
  501. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getUseRepository Procedure
  502. FUNCTION getUseRepository RETURNS LOGICAL
  503. ( ) FORWARD.
  504. /* _UIB-CODE-BLOCK-END */
  505. &ANALYZE-RESUME
  506. &ENDIF
  507. &IF DEFINED(EXCLUDE-getUserProperty) = 0 &THEN
  508. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getUserProperty Procedure
  509. FUNCTION getUserProperty RETURNS CHARACTER
  510. ( pcPropName AS CHARACTER ) FORWARD.
  511. /* _UIB-CODE-BLOCK-END */
  512. &ANALYZE-RESUME
  513. &ENDIF
  514. &IF DEFINED(EXCLUDE-instanceOf) = 0 &THEN
  515. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD instanceOf Procedure
  516. FUNCTION instanceOf RETURNS LOGICAL
  517. ( INPUT pcClass AS CHARACTER ) FORWARD.
  518. /* _UIB-CODE-BLOCK-END */
  519. &ANALYZE-RESUME
  520. &ENDIF
  521. &IF DEFINED(EXCLUDE-instancePropertyList) = 0 &THEN
  522. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD instancePropertyList Procedure
  523. FUNCTION instancePropertyList RETURNS CHARACTER
  524. ( pcPropList AS CHARACTER ) FORWARD.
  525. /* _UIB-CODE-BLOCK-END */
  526. &ANALYZE-RESUME
  527. &ENDIF
  528. &IF DEFINED(EXCLUDE-isDialogBoxParent) = 0 &THEN
  529. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD isDialogBoxParent Procedure
  530. FUNCTION isDialogBoxParent RETURNS LOGICAL
  531. ( INPUT hWidget AS HANDLE ) FORWARD.
  532. /* _UIB-CODE-BLOCK-END */
  533. &ANALYZE-RESUME
  534. &ENDIF
  535. &IF DEFINED(EXCLUDE-isFunctionInCallStack) = 0 &THEN
  536. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD isFunctionInCallStack Procedure
  537. FUNCTION isFunctionInCallStack RETURNS LOGICAL
  538. ( /* parameter-definitions */ ) FORWARD.
  539. /* _UIB-CODE-BLOCK-END */
  540. &ANALYZE-RESUME
  541. &ENDIF
  542. &IF DEFINED(EXCLUDE-isLinkInactive) = 0 &THEN
  543. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD isLinkInactive Procedure
  544. FUNCTION isLinkInactive RETURNS LOGICAL
  545. (pcLinkType AS CHAR,
  546. phObject AS HANDLE) FORWARD.
  547. /* _UIB-CODE-BLOCK-END */
  548. &ANALYZE-RESUME
  549. &ENDIF
  550. &IF DEFINED(EXCLUDE-linkHandles) = 0 &THEN
  551. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD linkHandles Procedure
  552. FUNCTION linkHandles RETURNS CHARACTER
  553. ( pcLink AS CHARACTER ) FORWARD.
  554. /* _UIB-CODE-BLOCK-END */
  555. &ANALYZE-RESUME
  556. &ENDIF
  557. &IF DEFINED(EXCLUDE-linkProperty) = 0 &THEN
  558. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD linkProperty Procedure
  559. FUNCTION linkProperty RETURNS CHARACTER
  560. ( pcLink AS CHARACTER, pcPropName AS CHARACTER ) FORWARD.
  561. /* _UIB-CODE-BLOCK-END */
  562. &ANALYZE-RESUME
  563. &ENDIF
  564. &IF DEFINED(EXCLUDE-mappedEntry) = 0 &THEN
  565. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD mappedEntry Procedure
  566. FUNCTION mappedEntry RETURNS CHARACTER
  567. (pcEntry AS CHAR,
  568. pcList AS CHAR,
  569. plFirst AS LOG,
  570. pcDelimiter AS CHAR) FORWARD.
  571. /* _UIB-CODE-BLOCK-END */
  572. &ANALYZE-RESUME
  573. &ENDIF
  574. &IF DEFINED(EXCLUDE-mergeLists) = 0 &THEN
  575. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD mergeLists Procedure
  576. FUNCTION mergeLists RETURNS CHARACTER
  577. ( pcList1 AS CHAR,
  578. pcList2 AS CHAR,
  579. pcDlm1 AS CHAR,
  580. pcDlm2 AS CHAR,
  581. pcNewDlm AS CHAR) FORWARD.
  582. /* _UIB-CODE-BLOCK-END */
  583. &ANALYZE-RESUME
  584. &ENDIF
  585. &IF DEFINED(EXCLUDE-messageNumber) = 0 &THEN
  586. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD messageNumber Procedure
  587. FUNCTION messageNumber RETURNS CHARACTER
  588. ( piMessage AS INTEGER ) FORWARD.
  589. /* _UIB-CODE-BLOCK-END */
  590. &ANALYZE-RESUME
  591. &ENDIF
  592. &IF DEFINED(EXCLUDE-modifyInactiveLinks) = 0 &THEN
  593. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD modifyInactiveLinks Procedure
  594. FUNCTION modifyInactiveLinks RETURNS LOGICAL
  595. ( pcMode AS CHAR,
  596. pcLinkType AS CHAR,
  597. phObject AS HANDLE) FORWARD.
  598. /* _UIB-CODE-BLOCK-END */
  599. &ANALYZE-RESUME
  600. &ENDIF
  601. &IF DEFINED(EXCLUDE-propertyType) = 0 &THEN
  602. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD propertyType Procedure
  603. FUNCTION propertyType RETURNS CHARACTER
  604. ( pcPropName AS CHARACTER ) FORWARD.
  605. /* _UIB-CODE-BLOCK-END */
  606. &ANALYZE-RESUME
  607. &ENDIF
  608. &IF DEFINED(EXCLUDE-reviewMessages) = 0 &THEN
  609. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD reviewMessages Procedure
  610. FUNCTION reviewMessages RETURNS CHARACTER
  611. ( ) FORWARD.
  612. /* _UIB-CODE-BLOCK-END */
  613. &ANALYZE-RESUME
  614. &ENDIF
  615. &IF DEFINED(EXCLUDE-setChildDataKey) = 0 &THEN
  616. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setChildDataKey Procedure
  617. FUNCTION setChildDataKey RETURNS LOGICAL
  618. ( cChildDataKey AS CHARACTER) FORWARD.
  619. /* _UIB-CODE-BLOCK-END */
  620. &ANALYZE-RESUME
  621. &ENDIF
  622. &IF DEFINED(EXCLUDE-setClassName) = 0 &THEN
  623. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setClassName Procedure
  624. FUNCTION setClassName RETURNS LOGICAL
  625. ( INPUT pcClassName AS CHARACTER ) FORWARD.
  626. /* _UIB-CODE-BLOCK-END */
  627. &ANALYZE-RESUME
  628. &ENDIF
  629. &IF DEFINED(EXCLUDE-setContainerHidden) = 0 &THEN
  630. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setContainerHidden Procedure
  631. FUNCTION setContainerHidden RETURNS LOGICAL
  632. ( plHidden AS LOGICAL ) FORWARD.
  633. /* _UIB-CODE-BLOCK-END */
  634. &ANALYZE-RESUME
  635. &ENDIF
  636. &IF DEFINED(EXCLUDE-setContainerSource) = 0 &THEN
  637. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setContainerSource Procedure
  638. FUNCTION setContainerSource RETURNS LOGICAL
  639. ( phObject AS HANDLE ) FORWARD.
  640. /* _UIB-CODE-BLOCK-END */
  641. &ANALYZE-RESUME
  642. &ENDIF
  643. &IF DEFINED(EXCLUDE-setContainerSourceEvents) = 0 &THEN
  644. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setContainerSourceEvents Procedure
  645. FUNCTION setContainerSourceEvents RETURNS LOGICAL
  646. ( pcEvents AS CHAR ) FORWARD.
  647. /* _UIB-CODE-BLOCK-END */
  648. &ANALYZE-RESUME
  649. &ENDIF
  650. &IF DEFINED(EXCLUDE-setDataLinksEnabled) = 0 &THEN
  651. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataLinksEnabled Procedure
  652. FUNCTION setDataLinksEnabled RETURNS LOGICAL
  653. ( lDataLinksEnabled AS LOGICAL ) FORWARD.
  654. /* _UIB-CODE-BLOCK-END */
  655. &ANALYZE-RESUME
  656. &ENDIF
  657. &IF DEFINED(EXCLUDE-setDataSource) = 0 &THEN
  658. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataSource Procedure
  659. FUNCTION setDataSource RETURNS LOGICAL
  660. ( phObject AS HANDLE ) FORWARD.
  661. /* _UIB-CODE-BLOCK-END */
  662. &ANALYZE-RESUME
  663. &ENDIF
  664. &IF DEFINED(EXCLUDE-setDataSourceEvents) = 0 &THEN
  665. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataSourceEvents Procedure
  666. FUNCTION setDataSourceEvents RETURNS LOGICAL
  667. ( pcEventsList AS CHARACTER ) FORWARD.
  668. /* _UIB-CODE-BLOCK-END */
  669. &ANALYZE-RESUME
  670. &ENDIF
  671. &IF DEFINED(EXCLUDE-setDataSourceNames) = 0 &THEN
  672. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataSourceNames Procedure
  673. FUNCTION setDataSourceNames RETURNS LOGICAL
  674. ( pcSourceNames AS CHAR ) FORWARD.
  675. /* _UIB-CODE-BLOCK-END */
  676. &ANALYZE-RESUME
  677. &ENDIF
  678. &IF DEFINED(EXCLUDE-setDataTarget) = 0 &THEN
  679. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataTarget Procedure
  680. FUNCTION setDataTarget RETURNS LOGICAL
  681. ( pcTarget AS CHARACTER ) FORWARD.
  682. /* _UIB-CODE-BLOCK-END */
  683. &ANALYZE-RESUME
  684. &ENDIF
  685. &IF DEFINED(EXCLUDE-setDataTargetEvents) = 0 &THEN
  686. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDataTargetEvents Procedure
  687. FUNCTION setDataTargetEvents RETURNS LOGICAL
  688. ( pcEvents AS CHARACTER ) FORWARD.
  689. /* _UIB-CODE-BLOCK-END */
  690. &ANALYZE-RESUME
  691. &ENDIF
  692. &IF DEFINED(EXCLUDE-setDBAware) = 0 &THEN
  693. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDBAware Procedure
  694. FUNCTION setDBAware RETURNS LOGICAL
  695. ( lAware AS LOGICAL ) FORWARD.
  696. /* _UIB-CODE-BLOCK-END */
  697. &ANALYZE-RESUME
  698. &ENDIF
  699. &IF DEFINED(EXCLUDE-setDesignDataObject) = 0 &THEN
  700. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDesignDataObject Procedure
  701. FUNCTION setDesignDataObject RETURNS LOGICAL
  702. ( pcDataObject AS CHARACTER ) FORWARD.
  703. /* _UIB-CODE-BLOCK-END */
  704. &ANALYZE-RESUME
  705. &ENDIF
  706. &IF DEFINED(EXCLUDE-setDynamicObject) = 0 &THEN
  707. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDynamicObject Procedure
  708. FUNCTION setDynamicObject RETURNS LOGICAL
  709. ( lTemp AS LOGICAL ) FORWARD.
  710. /* _UIB-CODE-BLOCK-END */
  711. &ANALYZE-RESUME
  712. &ENDIF
  713. &IF DEFINED(EXCLUDE-setHideOnInit) = 0 &THEN
  714. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setHideOnInit Procedure
  715. FUNCTION setHideOnInit RETURNS LOGICAL
  716. ( plHideOnInit AS LOGICAL ) FORWARD.
  717. /* _UIB-CODE-BLOCK-END */
  718. &ANALYZE-RESUME
  719. &ENDIF
  720. &IF DEFINED(EXCLUDE-setInactiveLinks) = 0 &THEN
  721. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setInactiveLinks Procedure
  722. FUNCTION setInactiveLinks RETURNS LOGICAL
  723. ( pcInactiveLinks AS CHARACTER ) FORWARD.
  724. /* _UIB-CODE-BLOCK-END */
  725. &ANALYZE-RESUME
  726. &ENDIF
  727. &IF DEFINED(EXCLUDE-setInstanceId) = 0 &THEN
  728. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setInstanceId Procedure
  729. FUNCTION setInstanceId RETURNS LOGICAL
  730. ( pdInstanceId AS DECIMAL ) FORWARD.
  731. /* _UIB-CODE-BLOCK-END */
  732. &ANALYZE-RESUME
  733. &ENDIF
  734. &IF DEFINED(EXCLUDE-setInstanceProperties) = 0 &THEN
  735. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setInstanceProperties Procedure
  736. FUNCTION setInstanceProperties RETURNS LOGICAL
  737. ( pcPropList AS CHARACTER ) FORWARD.
  738. /* _UIB-CODE-BLOCK-END */
  739. &ANALYZE-RESUME
  740. &ENDIF
  741. &IF DEFINED(EXCLUDE-setLabel) = 0 &THEN
  742. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setLabel Procedure
  743. FUNCTION setLabel RETURNS LOGICAL
  744. (pcLabel AS CHARACTER) FORWARD.
  745. /* _UIB-CODE-BLOCK-END */
  746. &ANALYZE-RESUME
  747. &ENDIF
  748. &IF DEFINED(EXCLUDE-setLayoutPosition) = 0 &THEN
  749. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setLayoutPosition Procedure
  750. FUNCTION setLayoutPosition RETURNS LOGICAL
  751. ( INPUT pcLayoutPosition AS CHARACTER ) FORWARD.
  752. /* _UIB-CODE-BLOCK-END */
  753. &ANALYZE-RESUME
  754. &ENDIF
  755. &IF DEFINED(EXCLUDE-setLogicalObjectName) = 0 &THEN
  756. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setLogicalObjectName Procedure
  757. FUNCTION setLogicalObjectName RETURNS LOGICAL
  758. ( cName AS CHARACTER ) FORWARD.
  759. /* _UIB-CODE-BLOCK-END */
  760. &ANALYZE-RESUME
  761. &ENDIF
  762. &IF DEFINED(EXCLUDE-setLogicalVersion) = 0 &THEN
  763. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setLogicalVersion Procedure
  764. FUNCTION setLogicalVersion RETURNS LOGICAL
  765. ( cVersion AS CHARACTER ) FORWARD.
  766. /* _UIB-CODE-BLOCK-END */
  767. &ANALYZE-RESUME
  768. &ENDIF
  769. &IF DEFINED(EXCLUDE-setManageReadErrors) = 0 &THEN
  770. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setManageReadErrors Procedure
  771. FUNCTION setManageReadErrors RETURNS LOGICAL
  772. (plManageReadErrors AS LOGICAL ) FORWARD.
  773. /* _UIB-CODE-BLOCK-END */
  774. &ANALYZE-RESUME
  775. &ENDIF
  776. &IF DEFINED(EXCLUDE-setMessageBoxType) = 0 &THEN
  777. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setMessageBoxType Procedure
  778. FUNCTION setMessageBoxType RETURNS LOGICAL
  779. ( input pcMessageBoxType as character ) FORWARD.
  780. /* _UIB-CODE-BLOCK-END */
  781. &ANALYZE-RESUME
  782. &ENDIF
  783. &IF DEFINED(EXCLUDE-setObjectHidden) = 0 &THEN
  784. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setObjectHidden Procedure
  785. FUNCTION setObjectHidden RETURNS LOGICAL
  786. ( plHidden AS LOGICAL ) FORWARD.
  787. /* _UIB-CODE-BLOCK-END */
  788. &ANALYZE-RESUME
  789. &ENDIF
  790. &IF DEFINED(EXCLUDE-setObjectName) = 0 &THEN
  791. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setObjectName Procedure
  792. FUNCTION setObjectName RETURNS LOGICAL
  793. ( pcName AS CHARACTER ) FORWARD.
  794. /* _UIB-CODE-BLOCK-END */
  795. &ANALYZE-RESUME
  796. &ENDIF
  797. &IF DEFINED(EXCLUDE-setObjectParent) = 0 &THEN
  798. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setObjectParent Procedure
  799. FUNCTION setObjectParent RETURNS LOGICAL
  800. ( phParent AS HANDLE ) FORWARD.
  801. /* _UIB-CODE-BLOCK-END */
  802. &ANALYZE-RESUME
  803. &ENDIF
  804. &IF DEFINED(EXCLUDE-setObjectsCreated) = 0 &THEN
  805. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setObjectsCreated Procedure
  806. FUNCTION setObjectsCreated RETURNS LOGICAL
  807. ( plCreated AS LOGICAL ) FORWARD.
  808. /* _UIB-CODE-BLOCK-END */
  809. &ANALYZE-RESUME
  810. &ENDIF
  811. &IF DEFINED(EXCLUDE-setObjectVersion) = 0 &THEN
  812. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setObjectVersion Procedure
  813. FUNCTION setObjectVersion RETURNS LOGICAL
  814. ( cObjectVersion AS CHARACTER ) FORWARD.
  815. /* _UIB-CODE-BLOCK-END */
  816. &ANALYZE-RESUME
  817. &ENDIF
  818. &IF DEFINED(EXCLUDE-setParentDataKey) = 0 &THEN
  819. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setParentDataKey Procedure
  820. FUNCTION setParentDataKey RETURNS LOGICAL
  821. ( cParentDataKey AS CHARACTER) FORWARD.
  822. /* _UIB-CODE-BLOCK-END */
  823. &ANALYZE-RESUME
  824. &ENDIF
  825. &IF DEFINED(EXCLUDE-setPassThroughLinks) = 0 &THEN
  826. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setPassThroughLinks Procedure
  827. FUNCTION setPassThroughLinks RETURNS LOGICAL
  828. ( pcLinks AS CHARACTER ) FORWARD.
  829. /* _UIB-CODE-BLOCK-END */
  830. &ANALYZE-RESUME
  831. &ENDIF
  832. &IF DEFINED(EXCLUDE-setPhysicalObjectName) = 0 &THEN
  833. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setPhysicalObjectName Procedure
  834. FUNCTION setPhysicalObjectName RETURNS LOGICAL
  835. ( cTemp AS CHARACTER ) FORWARD.
  836. /* _UIB-CODE-BLOCK-END */
  837. &ANALYZE-RESUME
  838. &ENDIF
  839. &IF DEFINED(EXCLUDE-setPhysicalVersion) = 0 &THEN
  840. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setPhysicalVersion Procedure
  841. FUNCTION setPhysicalVersion RETURNS LOGICAL
  842. ( cVersion AS CHARACTER ) FORWARD.
  843. /* _UIB-CODE-BLOCK-END */
  844. &ANALYZE-RESUME
  845. &ENDIF
  846. &IF DEFINED(EXCLUDE-setRenderingProcedure) = 0 &THEN
  847. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setRenderingProcedure Procedure
  848. FUNCTION setRenderingProcedure RETURNS LOGICAL
  849. ( cProcedure AS CHARACTER ) FORWARD.
  850. /* _UIB-CODE-BLOCK-END */
  851. &ANALYZE-RESUME
  852. &ENDIF
  853. &IF DEFINED(EXCLUDE-setRunAttribute) = 0 &THEN
  854. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setRunAttribute Procedure
  855. FUNCTION setRunAttribute RETURNS LOGICAL
  856. ( cRunAttribute AS CHARACTER ) FORWARD.
  857. /* _UIB-CODE-BLOCK-END */
  858. &ANALYZE-RESUME
  859. &ENDIF
  860. &IF DEFINED(EXCLUDE-setSuperProcedure) = 0 &THEN
  861. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setSuperProcedure Procedure
  862. FUNCTION setSuperProcedure RETURNS LOGICAL
  863. ( INPUT pcSuperProcedure AS CHARACTER ) FORWARD.
  864. /* _UIB-CODE-BLOCK-END */
  865. &ANALYZE-RESUME
  866. &ENDIF
  867. &IF DEFINED(EXCLUDE-setSuperProcedureHandle) = 0 &THEN
  868. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setSuperProcedureHandle Procedure
  869. FUNCTION setSuperProcedureHandle RETURNS LOGICAL
  870. ( INPUT pcProcedureHandle AS CHARACTER ) FORWARD.
  871. /* _UIB-CODE-BLOCK-END */
  872. &ANALYZE-RESUME
  873. &ENDIF
  874. &IF DEFINED(EXCLUDE-setSuperProcedureMode) = 0 &THEN
  875. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setSuperProcedureMode Procedure
  876. FUNCTION setSuperProcedureMode RETURNS LOGICAL
  877. ( INPUT pcProcedureMode AS CHARACTER ) FORWARD.
  878. /* _UIB-CODE-BLOCK-END */
  879. &ANALYZE-RESUME
  880. &ENDIF
  881. &IF DEFINED(EXCLUDE-setSupportedLinks) = 0 &THEN
  882. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setSupportedLinks Procedure
  883. FUNCTION setSupportedLinks RETURNS LOGICAL
  884. ( pcLinkList AS CHARACTER ) FORWARD.
  885. /* _UIB-CODE-BLOCK-END */
  886. &ANALYZE-RESUME
  887. &ENDIF
  888. &IF DEFINED(EXCLUDE-setThinRenderingProcedure) = 0 &THEN
  889. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setThinRenderingProcedure Procedure
  890. FUNCTION setThinRenderingProcedure RETURNS LOGICAL
  891. ( cProcedure AS CHARACTER ) FORWARD.
  892. /* _UIB-CODE-BLOCK-END */
  893. &ANALYZE-RESUME
  894. &ENDIF
  895. &IF DEFINED(EXCLUDE-setTranslatableProperties) = 0 &THEN
  896. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTranslatableProperties Procedure
  897. FUNCTION setTranslatableProperties RETURNS LOGICAL
  898. ( pcPropList AS CHARACTER ) FORWARD.
  899. /* _UIB-CODE-BLOCK-END */
  900. &ANALYZE-RESUME
  901. &ENDIF
  902. &IF DEFINED(EXCLUDE-setUIBMode) = 0 &THEN
  903. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setUIBMode Procedure
  904. FUNCTION setUIBMode RETURNS LOGICAL
  905. ( pcMode AS CHARACTER ) FORWARD.
  906. /* _UIB-CODE-BLOCK-END */
  907. &ANALYZE-RESUME
  908. &ENDIF
  909. &IF DEFINED(EXCLUDE-setUserProperty) = 0 &THEN
  910. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setUserProperty Procedure
  911. FUNCTION setUserProperty RETURNS LOGICAL
  912. ( pcPropName AS CHARACTER, pcPropValue AS CHARACTER ) FORWARD.
  913. /* _UIB-CODE-BLOCK-END */
  914. &ANALYZE-RESUME
  915. &ENDIF
  916. &IF DEFINED(EXCLUDE-showDataMessages) = 0 &THEN
  917. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD showDataMessages Procedure
  918. FUNCTION showDataMessages RETURNS CHARACTER
  919. ( ) FORWARD.
  920. /* _UIB-CODE-BLOCK-END */
  921. &ANALYZE-RESUME
  922. &ENDIF
  923. &IF DEFINED(EXCLUDE-showmessage) = 0 &THEN
  924. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD showmessage Procedure
  925. FUNCTION showmessage RETURNS LOGICAL
  926. ( pcMessage AS CHARACTER ) FORWARD.
  927. /* _UIB-CODE-BLOCK-END */
  928. &ANALYZE-RESUME
  929. &ENDIF
  930. &IF DEFINED(EXCLUDE-signature) = 0 &THEN
  931. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD signature Procedure
  932. FUNCTION signature RETURNS CHARACTER
  933. ( pcName AS CHARACTER ) FORWARD.
  934. /* _UIB-CODE-BLOCK-END */
  935. &ANALYZE-RESUME
  936. &ENDIF
  937. /* *********************** Procedure Settings ************************ */
  938. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  939. /* Settings for THIS-PROCEDURE
  940. Type: Procedure
  941. Allow:
  942. Frames: 0
  943. Add Fields to: Neither
  944. Other Settings: CODE-ONLY COMPILE
  945. */
  946. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  947. /* ************************* Create Window ************************** */
  948. &ANALYZE-SUSPEND _CREATE-WINDOW
  949. /* DESIGN Window definition (used by the UIB)
  950. CREATE WINDOW Procedure ASSIGN
  951. HEIGHT = 12.05
  952. WIDTH = 60.
  953. /* END WINDOW DEFINITION */
  954. */
  955. &ANALYZE-RESUME
  956. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB Procedure
  957. /* ************************* Included-Libraries *********************** */
  958. {src/adm2/smrtprop.i}
  959. /* _UIB-CODE-BLOCK-END */
  960. &ANALYZE-RESUME
  961. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  962. /* *************************** Main Block *************************** */
  963. /* _UIB-CODE-BLOCK-END */
  964. &ANALYZE-RESUME
  965. /* ********************** Internal Procedures *********************** */
  966. &IF DEFINED(EXCLUDE-addLink) = 0 &THEN
  967. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE addLink Procedure
  968. PROCEDURE addLink :
  969. /*------------------------------------------------------------------------------
  970. Purpose: Adds a link between two objects by setting property values
  971. in each.
  972. Parameters: INPUT phSource AS HANDLE -- source procedure handle,
  973. INPUT pcLink AS CHARACTER -- link name,
  974. INPUT phTarget AS HANDLE -- target procedure handle
  975. Notes: If the link is not in the SupportedLinks list for either object,
  976. then the link name will be treated as a single
  977. subscription in the "Target" for an event in the "Source".
  978. ------------------------------------------------------------------------------*/
  979. DEFINE INPUT PARAMETER phSource AS HANDLE NO-UNDO.
  980. DEFINE INPUT PARAMETER pcLink AS CHARACTER NO-UNDO.
  981. DEFINE INPUT PARAMETER phTarget AS HANDLE NO-UNDO.
  982. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  983. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  984. DEFINE VARIABLE iEvent AS INTEGER NO-UNDO.
  985. DEFINE VARIABLE cObject AS CHARACTER NO-UNDO.
  986. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  987. DEFINE VARIABLE cTargets AS CHARACTER NO-UNDO.
  988. DEFINE VARIABLE cSources AS CHARACTER NO-UNDO.
  989. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  990. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  991. DEFINE VARIABLE cNumTargs AS CHARACTER NO-UNDO.
  992. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  993. DEFINE VARIABLE hSrcContainer AS HANDLE NO-UNDO.
  994. DEFINE VARIABLE hTrgContainer AS HANDLE NO-UNDO.
  995. /* A container link is not a true link, so simplify logic and skip pass-thru
  996. logic to improve performance (only measurable with very many objects..) */
  997. IF pcLink = 'Container':U THEN
  998. DO:
  999. {set ContainerSource phSource phTarget}.
  1000. {get ContainerTarget cTargets phSource}.
  1001. /* This works also if cTargets = ? */
  1002. cTargets = (IF cTargets > '':U THEN cTargets + ',':U ELSE '':U)
  1003. + STRING(phTarget).
  1004. {set ContainerTarget cTargets phSource}.
  1005. END.
  1006. ELSE DO:
  1007. /* For a "PageN" link, where the name of the link as passed to addLink is
  1008. "PAGE" plus a page number, add that as a '|'-delimited string to the
  1009. PageNTarget property in the Source (the Container). Don't do anything
  1010. in the Target because PageNSource would always be the ContainerSource. */
  1011. IF pcLink BEGINS "PAGE":U AND pcLink NE "PAGE":U THEN /* It's "PageN" */
  1012. RUN modifyListProperty (phSource, 'ADD':U, "PageNTarget":U,
  1013. STRING(phTarget) + "|":U + SUBSTR(pcLink,5)).
  1014. ELSE DO:
  1015. DO iLink = 1 TO NUM-ENTRIES(scPassThroughLinks):
  1016. /* passthrough links are stored as link;single/multiple */
  1017. IF ENTRY(1, ENTRY(iLink, scPassThroughLinks), ";":U) = pcLink THEN
  1018. cNumTargs = ENTRY(2, ENTRY(iLink, scPassThroughLinks), ";":U).
  1019. END. /* END DO iLink */
  1020. IF cNumTargs NE "":U THEN /* we found a pass-through link */
  1021. DO:
  1022. /* If this is a pass-through link type then look for a matching link.
  1023. Do this only if the object in the "middle" of the potential
  1024. pass-through is a container such as a Window or Frame. */
  1025. {get ContainerType cType phSource}.
  1026. IF cType NE "":U THEN
  1027. DO:
  1028. /* First, if my Source has a Source of its own for the same link type,
  1029. then change my Source to that one. Leave the existing link in place,
  1030. IF the link type supports multiple targets. */
  1031. hObject = dynamic-function("get":U + pcLink + "Source":U IN phSource)
  1032. NO-ERROR.
  1033. IF VALID-HANDLE(hObject) THEN
  1034. DO:
  1035. /* Make sure the new Source is inside phSource
  1036. OR that phTarget is inside phSource
  1037. to ensure that we don't do a 'pass-by' which may happen
  1038. with an SBO or if the source is not a real container */
  1039. {get ContainerSource hSrcContainer hObject}.
  1040. {get ContainerSource hTrgContainer phTarget}.
  1041. IF hSrcContainer = phSource OR hTrgContainer = phSource THEN
  1042. DO:
  1043. IF cNumTargs = "single":U THEN
  1044. /* Link supports only one target; so don't keep the "intermediate"
  1045. link that goes to the container. */
  1046. RUN removeLink(hObject, pcLink, phSource).
  1047. /* set up to modify the new link in any case. */
  1048. phSource = hObject.
  1049. END. /* hContainer = phsource */
  1050. END. /* END DO IF VALID-HANDLE(hObject) */
  1051. END. /* END if phSource is a Container */
  1052. /* Allow for the possibility that both the source and target of a
  1053. pass-through link may be containers; check both and replace both
  1054. if appropriate. 9.1A -- 99-04-01-016 */
  1055. {get ContainerType cType phTarget}.
  1056. IF cType NE "":U THEN
  1057. DO:
  1058. /* If my target has target(s) of the same link type, then I want to
  1059. remove it/them and add a new link to my Source. */
  1060. cTargets = dynamic-function("get":U + pcLink + "Target":U IN phTarget)
  1061. NO-ERROR.
  1062. IF cTargets NE ? AND cTargets NE "":U THEN
  1063. DO: /* If the target has this link type at all */
  1064. DO iEntry = 1 TO NUM-ENTRIES(cTargets): /* if there are any */
  1065. hTarget = WIDGET-HANDLE(ENTRY(iEntry, cTargets)).
  1066. /* Make sure the new Target is inside the phtarget
  1067. OR phSource is inside phTarget and not on the
  1068. to ensure that we don't do a 'pass-by' which may happen
  1069. with an SBO or if the source is not a real container */
  1070. {get ContainerSource hTrgContainer hTarget}.
  1071. {get ContainerSource hSrcContainer phSource}.
  1072. IF hTrgContainer = phTarget OR hSrcContainer = phTarget THEN
  1073. DO:
  1074. RUN removeLink (phTarget, pcLink, hTarget).
  1075. RUN addLink (phSource, pcLink, hTarget).
  1076. END.
  1077. END. /* END DO iEntry */
  1078. /* if this link type supports multiple Targets, then go ahead
  1079. and add the link to the container in case it;s wanted;
  1080. otherwise just return, */
  1081. IF cNumTargs = "single":U THEN
  1082. RETURN. /* Since we did the altered addLink(s), we're done. */
  1083. END. /* END DO IF cTargets */
  1084. END. /* END IF cTYPE (phTarget is a Container) */
  1085. END. /* END pass-through code */
  1086. /* If this isn't a recognized link, just do a single subscription
  1087. of the name. Do this only if neither side supports the link. */
  1088. {get SupportedLinks cSources phSource}.
  1089. {get SupportedLinks cTargets phTarget}.
  1090. IF (pcLink NE "Container":U AND NOT pcLink BEGINS "Page":U) AND
  1091. (LOOKUP(pcLink + "-Source":U, cSources) = 0 AND
  1092. LOOKUP(pcLink + "-Target":U, cTargets) = 0) THEN
  1093. DO:
  1094. SUBSCRIBE PROCEDURE phTarget TO pcLink IN phSource.
  1095. /* Because there are no "Source" and "Target" properties for
  1096. these "dynamic" links, we need to store the handles where
  1097. the linkHandles function will be able to get at them later,
  1098. if needed. */
  1099. RUN modifyUserLinks IN phSource ('ADD':U, pcLink + "-Target":U,
  1100. phTarget).
  1101. RUN modifyUserLinks IN phTarget ('ADD':U, pcLink + "-Source":U,
  1102. phSource).
  1103. RETURN.
  1104. END. /* END DO for non-Supported Link */
  1105. /* All the remaining code is for Supported Links. */
  1106. /* Whether we found a pass-through or not, continue with the current link */
  1107. /* NOTE: This will fail w/o error if the property isn't defined.*/
  1108. /* Although standard SmartLinks permit a single Source and multiple
  1109. Targets, check to see whether this link does. A single Source or
  1110. Target is stored as a handle, multiple Sources or Targets as a
  1111. list in Character form. */
  1112. IF dynamic-function('propertyType':U IN phTarget, pcLink + "Source":U)
  1113. = "CHARACTER":U THEN
  1114. RUN modifyListProperty
  1115. (phTarget, 'ADD':U, pcLink + "Source":U, STRING(phSource)).
  1116. ELSE DO:
  1117. IF dynamic-function("get":U + pcLink + "Source":U IN phTarget) = ? THEN
  1118. dynamic-function("set":U + pcLink + "Source":U IN phTarget,phSource)
  1119. NO-ERROR.
  1120. ELSE DO:
  1121. showMessage(SUBSTITUTE({fnarg messageNumber 79}, phTarget:FILE-NAME, pcLink)).
  1122. RETURN.
  1123. END. /* END DO IF Not Unknown */
  1124. END. /* END ELSE DO (if Not CHARACTER) */
  1125. IF dynamic-function('propertyType':U IN phSource, pcLink + "Target":U)
  1126. = "CHARACTER":U THEN
  1127. RUN modifyListProperty
  1128. (phSource, 'ADD':U, pcLink + "Target":U, STRING(phTarget)).
  1129. ELSE DO:
  1130. IF dynamic-function("get":U + pcLink + "Target":U IN phSource) = ? THEN
  1131. dynamic-function("set":U + pcLink + "Target":U IN phSource,
  1132. phTarget) NO-ERROR.
  1133. ELSE DO:
  1134. showMessage(SUBSTITUTE({fnarg messageNumber 80}, phSource:FILE-NAME, pcLink)).
  1135. RETURN.
  1136. END. /* END DO IF Not Unknown */
  1137. END. /* END ELSE DO (if Not CHARACTER) */
  1138. END. /* END ELSE DO for normal (non-pageN) link processing */
  1139. END. /* pcLink <> 'Container' */
  1140. /* SUBSCRIBE to all the appropriate events on each side of the link.
  1141. First SUBSCRIBE the target to all the events it says it wants
  1142. from its source. */
  1143. RUN linkStateHandler IN phTarget ('Add':U,
  1144. phSource,
  1145. pcLink + "Source":U).
  1146. /* Then SUBSCRIBE the source to all the events (if any) that it wants
  1147. from its target. */
  1148. RUN linkStateHandler IN phSource ('Add':U,
  1149. phTarget,
  1150. pcLink + "Target":U).
  1151. RETURN.
  1152. END PROCEDURE.
  1153. /* _UIB-CODE-BLOCK-END */
  1154. &ANALYZE-RESUME
  1155. &ENDIF
  1156. &IF DEFINED(EXCLUDE-addMessage) = 0 &THEN
  1157. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE addMessage Procedure
  1158. PROCEDURE addMessage :
  1159. /*------------------------------------------------------------------------------
  1160. Purpose: Inserts the message text into a data message log along with its
  1161. Field, and Table if known.
  1162. Params: INPUT pcText AS CHARACTER -- Text of the message;
  1163. INPUT pcField AS CHARACTER -- the field name for which the message
  1164. occurred, if it was related to a specific field;
  1165. INPUT pcTable AS CHARACTER -- the database table for which the
  1166. message occurred, if it was related to an update to a database
  1167. table.
  1168. Notes: If pcText is unknown (?), that signals
  1169. that this function should retrieve messages from the
  1170. error-status handle.
  1171. ------------------------------------------------------------------------------*/
  1172. DEFINE INPUT PARAMETER pcText AS CHARACTER NO-UNDO.
  1173. DEFINE INPUT PARAMETER pcField AS CHARACTER NO-UNDO.
  1174. DEFINE INPUT PARAMETER pcTable AS CHARACTER NO-UNDO.
  1175. DEFINE VARIABLE iMsg AS INTEGER NO-UNDO.
  1176. DEFINE VARIABLE iMsgCnt AS INTEGER NO-UNDO.
  1177. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  1178. /* If one or more "raw" messages were passed (i.e., they are already in
  1179. the delimited formatted created below), then these were returned from
  1180. an AppServer object or other remote object. Just append them to any local
  1181. messages. */
  1182. IF pcText NE ? AND INDEX(pcText, CHR(4)) NE 0 THEN
  1183. ASSIGN gcDataMessages = gcDataMessages +
  1184. (IF gcDataMessages NE "":U THEN CHR(3) ELSE "":U) +
  1185. pcText.
  1186. ELSE DO:
  1187. /* If there's no message passed, this means that a Progress ERROR-STATUS
  1188. was detected, so we add a row for each of those messages. */
  1189. iMsgCnt = IF pcText = ? THEN ERROR-STATUS:NUM-MESSAGES ELSE 1.
  1190. DO iMsg = 1 TO iMsgCnt:
  1191. IF pcText = ? THEN
  1192. DO:
  1193. /* When logging ERROR-STATUS messages, remove any which directly
  1194. reference the BUFFER-FIELD attribute; these errors are side-effects
  1195. of other assignment errors which should be reported to the user
  1196. instead. */
  1197. cMessage = ERROR-STATUS:GET-MESSAGE(iMsg).
  1198. IF INDEX(cMessage, 'BUFFER-FIELD':U) NE 0 THEN NEXT.
  1199. END. /* END DO IF pcText = ? */
  1200. ASSIGN gcDataMessages = gcDataMessages +
  1201. (IF gcDataMessages NE "":U THEN CHR(3) ELSE "":U) +
  1202. (IF pcText = ? THEN cMessage ELSE pcText)
  1203. + CHR(4) + (IF pcField = ? THEN "":U ELSE pcField)
  1204. + CHR(4) + (IF pcTable = ? THEN "":U ELSE pcTable).
  1205. END. /* END DO iMsg */
  1206. END. /* END ELSE DO */
  1207. RETURN.
  1208. END PROCEDURE.
  1209. /* _UIB-CODE-BLOCK-END */
  1210. &ANALYZE-RESUME
  1211. &ENDIF
  1212. &IF DEFINED(EXCLUDE-addServerError) = 0 &THEN
  1213. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE addServerError Procedure
  1214. PROCEDURE addServerError :
  1215. /*------------------------------------------------------------------------------
  1216. Purpose: Adds server ERROR to the message stack.
  1217. This is only used for unexpected ERRORs returned from the
  1218. Service Adapter, not normal save or query exceptions/errors.
  1219. Parameters: pcEvent - 'DEFINE'
  1220. - 'RETRIEVE'
  1221. - 'SUBMIT'
  1222. pcMessage - error message (service adapterreturn-value)
  1223. - ? or blank use error-status
  1224. pcEntities - requested entities/objects/tables
  1225. Notes: This is only used for applications that uses datasviews and
  1226. service adpaters to manage all data requests
  1227. ------------------------------------------------------------------------------*/
  1228. DEFINE INPUT PARAMETER pcEvent AS CHARACTER NO-UNDO.
  1229. DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
  1230. DEFINE INPUT PARAMETER pcEntities AS CHARACTER NO-UNDO.
  1231. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  1232. DEFINE VARIABLE iMessage AS INTEGER NO-UNDO.
  1233. DEFINE VARIABLE iError AS INTEGER NO-UNDO.
  1234. IF pcMessage = ? OR pcMessage = "" THEN
  1235. DO iError = 1 TO ERROR-STATUS:NUM-MESSAGES:
  1236. pcMessage = pcMessage
  1237. + (IF iError = 1 THEN "" ELSE "~n")
  1238. + ERROR-STATUS:GET-MESSAGE(iError).
  1239. END.
  1240. CASE pcEvent:
  1241. WHEN 'define' THEN iMessage = 98.
  1242. WHEN 'retrieve' THEN iMessage = 99.
  1243. WHEN 'submit' THEN iMessage = 100.
  1244. END.
  1245. IF iMessage > 0 THEN
  1246. DO:
  1247. cHeader = SUBSTITUTE({fnarg messageNumber iMessage},pcEntities).
  1248. RUN addMessage IN TARGET-PROCEDURE(cHeader,?,?).
  1249. END.
  1250. RUN addMessage IN TARGET-PROCEDURE(pcMessage,?,?).
  1251. RETURN.
  1252. END PROCEDURE.
  1253. /* _UIB-CODE-BLOCK-END */
  1254. &ANALYZE-RESUME
  1255. &ENDIF
  1256. &IF DEFINED(EXCLUDE-addServerReadError) = 0 &THEN
  1257. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE addServerReadError Procedure
  1258. PROCEDURE addServerReadError :
  1259. /*------------------------------------------------------------------------------
  1260. Purpose: Adds server ERROR to the message stack on the client.
  1261. This is used by the container for unexpected ERRORs returned from
  1262. the Appserver. (record not found )
  1263. Parameters: pcMessage - error message (service adapterreturn-value)
  1264. - 'ERROR', ? or blank use default message
  1265. Notes: This is used for applications that uses SDOs.
  1266. ------------------------------------------------------------------------------*/
  1267. DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
  1268. RUN addMessage IN TARGET-PROCEDURE({fnarg messageNumber 102},?,?).
  1269. IF pcMessage = ? OR pcMessage = "" THEN
  1270. RUN addMessage IN TARGET-PROCEDURE({fnarg messageNumber 103},?,?).
  1271. ELSE
  1272. RUN addMessage IN TARGET-PROCEDURE(pcMessage,?,?).
  1273. RETURN.
  1274. END PROCEDURE.
  1275. /* _UIB-CODE-BLOCK-END */
  1276. &ANALYZE-RESUME
  1277. &ENDIF
  1278. &IF DEFINED(EXCLUDE-adjustTabOrder) = 0 &THEN
  1279. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE adjustTabOrder Procedure
  1280. PROCEDURE adjustTabOrder :
  1281. /*------------------------------------------------------------------------------
  1282. Purpose: Changes the tab order of SmartObjects
  1283. Parameters: INPUT phObject AS HANDLE -- handle of the smart object
  1284. INPUT phAnchor AS HANDLE -- handle of either another smartobject
  1285. procedure or a widget-handle of the object that will
  1286. anchor the smartobject
  1287. INPUT pcPosition AS CHARACTER --
  1288. "After" if smartobject is moved-after the anchor
  1289. "Before" if smartobject is moved-before anchor
  1290. Notes: adjustTabOrder calls are generated by the AppBuilder in
  1291. adm-create-objects
  1292. ------------------------------------------------------------------------------*/
  1293. DEFINE INPUT PARAMETER phObject AS HANDLE NO-UNDO.
  1294. DEFINE INPUT PARAMETER phAnchor AS HANDLE NO-UNDO.
  1295. DEFINE INPUT PARAMETER pcPosition AS CHARACTER NO-UNDO.
  1296. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  1297. /* Get widget handle of phObject */
  1298. {get ContainerHandle hContainer phObject}.
  1299. IF NOT VALID-HANDLE(hContainer) THEN
  1300. RETURN "ADM-ERROR":U.
  1301. /* If phAnchor is smart-object procedure handle, get its object-handle */
  1302. IF phAnchor:TYPE = "PROCEDURE":U THEN DO:
  1303. {get ContainerHandle phAnchor phAnchor}.
  1304. IF NOT VALID-HANDLE(phAnchor) THEN
  1305. RETURN "ADM-ERROR":U.
  1306. END.
  1307. /* Check that the two handle have the same parent */
  1308. IF hContainer:PARENT NE phAnchor:PARENT THEN
  1309. RETURN "ADM-ERROR":U.
  1310. IF pcPosition = "BEFORE":U THEN hContainer:MOVE-BEFORE(phAnchor).
  1311. ELSE hContainer:MOVE-AFTER(phAnchor).
  1312. END PROCEDURE.
  1313. /* _UIB-CODE-BLOCK-END */
  1314. &ANALYZE-RESUME
  1315. &ENDIF
  1316. &IF DEFINED(EXCLUDE-applyEntry) = 0 &THEN
  1317. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE applyEntry Procedure
  1318. PROCEDURE applyEntry :
  1319. /*------------------------------------------------------------------------------
  1320. Purpose: Applies "ENTRY" to the first enabled and visible object
  1321. in the default frame (unless pcField is specified),
  1322. or in the first child which is a Frame.
  1323. Parameters: INPUT pcField AS CHARACTER -- optional fieldname; if specified,
  1324. (if this parameter is not blank or unknown), then
  1325. the frame field of that name will be positioned to.
  1326. Notes:
  1327. ------------------------------------------------------------------------------*/
  1328. DEFINE INPUT PARAMETER pcField AS CHARACTER NO-UNDO.
  1329. {fnarg applyFocus pcField}.
  1330. RETURN.
  1331. END PROCEDURE.
  1332. /* _UIB-CODE-BLOCK-END */
  1333. &ANALYZE-RESUME
  1334. &ENDIF
  1335. &IF DEFINED(EXCLUDE-changeCursor) = 0 &THEN
  1336. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE changeCursor Procedure
  1337. PROCEDURE changeCursor :
  1338. /*------------------------------------------------------------------------------
  1339. Purpose: Sets the cursor on all windows and on any dialog box frames
  1340. that are currently on the screen.
  1341. Parameters: INPUT pcCursor AS CHARACTER -- name of cursor to use.
  1342. This should be either "WAIT" or "".
  1343. ------------------------------------------------------------------------------*/
  1344. DEFINE INPUT PARAMETER pcCursor AS CHARACTER NO-UNDO.
  1345. &IF "{&WINDOW-SYSTEM}":U ne "TTY":U &THEN
  1346. /* Set the Wait state, which changes the cursor automatically */
  1347. SESSION:SET-WAIT-STATE(IF pcCursor = "WAIT":U THEN "GENERAL":U ELSE "":U).
  1348. &ENDIF
  1349. RETURN.
  1350. END PROCEDURE.
  1351. /* _UIB-CODE-BLOCK-END */
  1352. &ANALYZE-RESUME
  1353. &ENDIF
  1354. &IF DEFINED(EXCLUDE-createControls) = 0 &THEN
  1355. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE createControls Procedure
  1356. PROCEDURE createControls :
  1357. /*------------------------------------------------------------------------------
  1358. Purpose: Default action for SmartObject-specific initialization of
  1359. ActiveX Controls. Runs adm-create-controls, an AppBuilder-
  1360. generated procedure.
  1361. Parameters: <none>
  1362. Notes: A localization of this behavior should be placed in a procedure
  1363. called createControls in the SmartObject. The V8-style name
  1364. adm-create-controls for the standard behavior is maintained
  1365. in order to allow a localization in the same procedure file.
  1366. ------------------------------------------------------------------------------*/
  1367. RUN adm-create-controls IN TARGET-PROCEDURE NO-ERROR.
  1368. RETURN.
  1369. END PROCEDURE.
  1370. /* _UIB-CODE-BLOCK-END */
  1371. &ANALYZE-RESUME
  1372. &ENDIF
  1373. &IF DEFINED(EXCLUDE-destroyObject) = 0 &THEN
  1374. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE destroyObject Procedure
  1375. PROCEDURE destroyObject :
  1376. /*------------------------------------------------------------------------------
  1377. Purpose: Cleans up and deletes the current object procedure
  1378. and its descendents, if any.
  1379. Parameters: <none>
  1380. Notes: Checks first to see if any object is not prepared to be
  1381. destroyed (e.g., if DataModified is set).
  1382. ------------------------------------------------------------------------------*/
  1383. DEFINE VARIABLE hSource AS HANDLE NO-UNDO.
  1384. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  1385. DEFINE VARIABLE lCancel AS LOGICAL NO-UNDO.
  1386. DEFINE VARIABLE lUseRepos AS LOGICAL NO-UNDO.
  1387. DEFINE VARIABLE cSourceEvents AS CHARACTER NO-UNDO.
  1388. &SCOPED-DEFINE xp-assign
  1389. {get ContainerSource hSource}
  1390. {get ContainerSourceEvents cSourceEvents}
  1391. .
  1392. &UNDEFINE xp-assign
  1393. /* It is too late to stop destroy when published from the container source.
  1394. confirmExit is published down the container link chain. In order to only
  1395. publish from the top and not again further down the chain, only publish
  1396. if this event is NOT published from the ContainerSource or if not
  1397. subscribed to the event (the last is rather unlikely, but is for backwards
  1398. compatibilty with the old unconditional publish ensuring that the event
  1399. reaches subscribers that do not use the containersource subscription) */
  1400. IF hSource <> SOURCE-PROCEDURE
  1401. OR LOOKUP('confirmExit':U,cSourceEvents) = 0 THEN
  1402. DO:
  1403. PUBLISH 'confirmExit':U FROM TARGET-PROCEDURE (INPUT-OUTPUT lCancel).
  1404. /* Any message will already have been displayed if Cancel is true.
  1405. Main window close trigger will return no-apply based on check
  1406. of error or return-value */
  1407. IF lCancel THEN
  1408. RETURN ERROR "ADM-ERROR":U.
  1409. END.
  1410. /* Hide objects where applicable before destroying contents. */
  1411. RUN hideObject IN TARGET-PROCEDURE.
  1412. PUBLISH 'destroyObject':U FROM TARGET-PROCEDURE. /* Destroy descendents */
  1413. /* If we close a subwindow in character mode, we need to explicitly
  1414. re-view its parent. */
  1415. &IF "{&WINDOW-SYSTEM}":U = "TTY":U &THEN
  1416. IF CAN-DO('*Window*':U,TARGET-PROCEDURE:TYPE) THEN
  1417. DO:
  1418. hParent = WIDGET-HANDLE(DYNAMIC-FUNCTION
  1419. ("linkProperty":U IN TARGET-PROCEDURE,
  1420. "CONTAINER-SOURCE":U, "ContainerHandle":U)).
  1421. IF VALID-HANDLE(hParent) AND VALID-HANDLE(hSource) THEN
  1422. RUN viewObject IN hSource.
  1423. END.
  1424. &ENDIF
  1425. RUN removeAllLinks IN TARGET-PROCEDURE.
  1426. {get UseRepository lUseRepos}.
  1427. /* clone the repos admprops into a static one in the static object's
  1428. widget-pool so it lives to be referenced after super in destroyObject
  1429. overrides */
  1430. IF lUseRepos THEN
  1431. DO:
  1432. RUN adm-clone-props IN TARGET-PROCEDURE NO-ERROR.
  1433. ASSIGN ERROR-STATUS:ERROR = NO.
  1434. END.
  1435. RUN disable_UI IN TARGET-PROCEDURE.
  1436. RETURN.
  1437. END PROCEDURE.
  1438. /* _UIB-CODE-BLOCK-END */
  1439. &ANALYZE-RESUME
  1440. &ENDIF
  1441. &IF DEFINED(EXCLUDE-displayLinks) = 0 &THEN
  1442. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE displayLinks Procedure
  1443. PROCEDURE displayLinks :
  1444. /*------------------------------------------------------------------------------
  1445. Purpose: Utility procedure to put up a dialog showing all the ADM
  1446. links for a given container object.
  1447. Parameters: <none>
  1448. Notes: Can be executed by selecting displayLinks from the ProTools
  1449. procedure object viewer for the desired SmartContainer.
  1450. ------------------------------------------------------------------------------*/
  1451. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  1452. DEFINE VARIABLE Radio-Sort AS CHARACTER LABEL "Sort By" INIT "Type":U
  1453. VIEW-AS RADIO-SET HORIZONTAL
  1454. RADIO-BUTTONS
  1455. "Type", "Type":U,
  1456. "Source", "Source":U,
  1457. "Target", "Target":U
  1458. SIZE 32 BY 1 NO-UNDO.
  1459. DEFINE BUTTON Btn_OK AUTO-GO
  1460. LABEL "OK"
  1461. SIZE 12 BY 1.08
  1462. BGCOLOR 8 .
  1463. /* Query definitions */
  1464. DEFINE QUERY BROWSE-1 FOR
  1465. ADMLink SCROLLING.
  1466. &SCOP OPEN-QUERY-BROWSE-1 OPEN QUERY BROWSE-1 FOR EACH ADMLink ~
  1467. BY IF Radio-Sort = "Type":U THEN linkType ~
  1468. ELSE IF Radio-Sort = "Source":U THEN linkSource:file-name ~
  1469. ELSE linkTarget:file-name.
  1470. /* Browse definitions */
  1471. DEFINE BROWSE BROWSE-1
  1472. QUERY BROWSE-1 NO-LOCK DISPLAY
  1473. linkType label "Type" Format "X(12)":U
  1474. LC(linkSource:FILE-NAME) label "Source" Format "X(35)":U
  1475. LC(linkTarget:FILE-NAME) label "Target" Format "X(35)":U
  1476. WITH NO-ROW-MARKERS SEPARATORS SIZE 87 BY 9.2.
  1477. DEFINE FRAME Dialog-Frame
  1478. Radio-Sort AT ROW 1.5 COL 30
  1479. Btn_OK AT ROW 13 COL 32
  1480. BROWSE-1 AT ROW 3 COL 3 SPACE(2)
  1481. SPACE(3) SKIP(1)
  1482. WITH VIEW-AS DIALOG-BOX KEEP-TAB-ORDER
  1483. SIDE-LABELS NO-UNDERLINE THREE-D SCROLLABLE
  1484. TITLE "ADM Links".
  1485. ON VALUE-CHANGED OF Radio-Sort
  1486. DO:
  1487. ASSIGN Radio-Sort.
  1488. {&OPEN-QUERY-BROWSE-1}
  1489. END.
  1490. ENABLE Radio-Sort BROWSE-1 Btn_OK
  1491. WITH FRAME Dialog-Frame.
  1492. EMPTY TEMP-TABLE ADMLink.
  1493. RUN oneObjectLinks (TARGET-PROCEDURE).
  1494. {&OPEN-QUERY-BROWSE-1}
  1495. WAIT-FOR GO OF FRAME Dialog-Frame.
  1496. END PROCEDURE.
  1497. /* _UIB-CODE-BLOCK-END */
  1498. &ANALYZE-RESUME
  1499. &ENDIF
  1500. &IF DEFINED(EXCLUDE-editInstanceProperties) = 0 &THEN
  1501. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE editInstanceProperties Procedure
  1502. PROCEDURE editInstanceProperties :
  1503. /* -----------------------------------------------------------------------------
  1504. Purpose: Runs the dialog to get runtime property settings
  1505. Parameters: <none>
  1506. Notes: Generally run by the AppBuilder in design mode.
  1507. -----------------------------------------------------------------------------*/
  1508. DEFINE VARIABLE cDialog AS CHARACTER NO-UNDO.
  1509. {get PropertyDialog cDialog}.
  1510. RUN VALUE(cDialog) (INPUT TARGET-PROCEDURE) NO-ERROR.
  1511. IF ERROR-STATUS:ERROR THEN
  1512. showMessage
  1513. ({fnarg messageNumber 81}).
  1514. RETURN.
  1515. END PROCEDURE.
  1516. /* _UIB-CODE-BLOCK-END */
  1517. &ANALYZE-RESUME
  1518. &ENDIF
  1519. &IF DEFINED(EXCLUDE-exitObject) = 0 &THEN
  1520. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE exitObject Procedure
  1521. PROCEDURE exitObject :
  1522. /* -----------------------------------------------------------------------------
  1523. Purpose: Passes an exit request to its container
  1524. Parameters: <none>
  1525. Notes: The convention is that the standard routine always
  1526. passes an exit request to its CONTAINER-SOURCE. The container
  1527. that is actually able to initiate the exit should define
  1528. a local version and *not* call the standard one.
  1529. That local "exitObject" is built into the SmartWindow template.
  1530. --------------------------------------------------------------------------*/
  1531. PUBLISH 'exitObject':U FROM TARGET-PROCEDURE. /* NOTE: MUST go to Container-Source */
  1532. RETURN.
  1533. END PROCEDURE.
  1534. /* _UIB-CODE-BLOCK-END */
  1535. &ANALYZE-RESUME
  1536. &ENDIF
  1537. &IF DEFINED(EXCLUDE-hideObject) = 0 &THEN
  1538. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE hideObject Procedure
  1539. PROCEDURE hideObject :
  1540. /*------------------------------------------------------------------------------
  1541. Purpose: Hides the current object.
  1542. Parameters: none
  1543. Notes: "Hide" is a logical concept here; non-visual objects may also be
  1544. "hidden", meaning that they are not currently active; this may
  1545. affect whether code in some subscribe procedures is executed.
  1546. ------------------------------------------------------------------------------*/
  1547. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  1548. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  1549. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  1550. &SCOPED-DEFINE xp-assign
  1551. {get ContainerHandle hContainer}
  1552. {set ObjectHidden yes}
  1553. {get containerType cType}.
  1554. &UNDEFINE xp-assign
  1555. IF VALID-HANDLE(hContainer) THEN
  1556. &IF "{&WINDOW-SYSTEM}":U = "TTY":U &THEN
  1557. IF hContainer:TYPE EQ "WINDOW" THEN DO: /* Can't hide TTY window, */
  1558. hFrame = hContainer:FIRST-CHILD.
  1559. IF VALID-HANDLE(hFrame) THEN
  1560. HIDE hFrame NO-PAUSE. /* so hide the contents. */
  1561. END.
  1562. ELSE
  1563. &ENDIF
  1564. ASSIGN hContainer:HIDDEN = YES.
  1565. RUN returnFocus IN TARGET-PROCEDURE (TARGET-PROCEDURE:HANDLE).
  1566. IF cType NE "":U THEN
  1567. /* We don't need to physically hide the SmartObjects in this Container -
  1568. they will disappear when it is hidden - but we need to tell them that
  1569. they are part of a hidden Container so that they can set links
  1570. and other states dependent on HIDDEN accordingly. */
  1571. dynamic-function("assignLinkProperty":U In TARGET-PROCEDURE,
  1572. "Container-Target":U, "ContainerHidden":U, "yes":U).
  1573. /* For those objects which want to "deactivate" a link when an object is
  1574. hidden, we tell them that this object is 'inactive'. We also set the
  1575. ObjectActive property to hold onto the state for future inquiries. */
  1576. PUBLISH 'LinkState':U FROM TARGET-PROCEDURE ('inactive':U).
  1577. RETURN.
  1578. END PROCEDURE.
  1579. /* _UIB-CODE-BLOCK-END */
  1580. &ANALYZE-RESUME
  1581. &ENDIF
  1582. &IF DEFINED(EXCLUDE-initializeObject) = 0 &THEN
  1583. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject Procedure
  1584. PROCEDURE initializeObject :
  1585. /*------------------------------------------------------------------------------
  1586. Purpose: Performs general initialization common to all objects.
  1587. Params: <none>
  1588. Notes: There is a version of initializeObject in virtually every Super
  1589. procedure; each performs the initialization appropriate to that
  1590. class of objects.
  1591. ------------------------------------------------------------------------------*/
  1592. DEFINE VARIABLE cSource AS CHARACTER NO-UNDO.
  1593. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  1594. DEFINE VARIABLE lInitialized AS LOGICAL NO-UNDO.
  1595. DEFINE VARIABLE cNewRecord AS CHARACTER NO-UNDO.
  1596. DEFINE VARIABLE lHideOnInit AS LOGICAL NO-UNDO.
  1597. {get ObjectInitialized lInitialized}.
  1598. IF lInitialized THEN
  1599. RETURN "ADM-ERROR":U. /* Just get out if already initialized. */
  1600. /* Initialize any OCX's in the SmartObjects. */
  1601. RUN createControls IN TARGET-PROCEDURE NO-ERROR.
  1602. RUN control_load IN TARGET-PROCEDURE NO-ERROR.
  1603. /* If this object has no visualization, we still need to run viewObject unless
  1604. the hideOninit is true. view and hide is a logical state that also is used
  1605. to indicate whether an object is active.
  1606. Visual objects does this in its initilizeObject override AFTER enable */
  1607. &SCOPED-DEFINE xp-assign
  1608. {get ContainerHandle hContainer}
  1609. {set ObjectInitialized yes}.
  1610. &UNDEFINE xp-assign
  1611. IF NOT VALID-HANDLE (hContainer) THEN
  1612. DO:
  1613. {get HideOnInit lHideOnInit}.
  1614. IF NOT lHideOnInit THEN
  1615. RUN viewObject IN TARGET-PROCEDURE.
  1616. ELSE
  1617. PUBLISH "LinkState":U FROM TARGET-PROCEDURE ('inactive':U).
  1618. END.
  1619. RETURN.
  1620. END PROCEDURE.
  1621. /* _UIB-CODE-BLOCK-END */
  1622. &ANALYZE-RESUME
  1623. &ENDIF
  1624. &IF DEFINED(EXCLUDE-linkStateHandler) = 0 &THEN
  1625. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE linkStateHandler Procedure
  1626. PROCEDURE linkStateHandler :
  1627. /*------------------------------------------------------------------------------
  1628. Purpose: Handler for the LinkState event, also used by addlink and removeLink,
  1629. Subscribes/unsubscribes to the <link>events in the object
  1630. Parameter: pcState - 'Add' - activate newly added links by subscribing to
  1631. the <Link>Events of the passed object.
  1632. - 'Active' - activate links by subscribing to the
  1633. <Link>Events of the passed object.
  1634. - 'Remove' - deactivate newly removed links by
  1635. unsubscribing to the <Link>Events of the
  1636. passed object.
  1637. - 'Inactive' - deactivate links by unsubscribing to the
  1638. <Link>Events of the passed object.
  1639. phObject - Object to subscribe/unsubscribe to.
  1640. pcLink - Full link name pointing to the passed object.
  1641. DataSource or Data-source (both forms supported)
  1642. Notes: The name -handler attempts to indicate that this is an event-handler
  1643. that not should be called directly outside of the intended events, but
  1644. rather be actively used as an event to ensure that properties that
  1645. are link dependant are set/removed.
  1646. - It's crucial that the subscribtion only happens once so we check
  1647. ObjectActive to ensure that the inactive/active unsubscribe/subscribe
  1648. only is performed when the state is changed:
  1649. updateLinkState(State)
  1650. publish linkState (state) --> receiver
  1651. Here.. <---------------------- run linkStateHandler in source(target).
  1652. {set ObjectActive ..}
  1653. - Since this may be called for several objects/links the ObjectActive
  1654. property has to be managed outside of this.
  1655. ------------------------------------------------------------------------------*/
  1656. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  1657. DEFINE INPUT PARAMETER phObject AS HANDLE NO-UNDO.
  1658. DEFINE INPUT PARAMETER pcLink AS CHARACTER NO-UNDO.
  1659. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  1660. DEFINE VARIABLE iEvent AS INTEGER NO-UNDO.
  1661. DEFINE VARIABLE cLinkedObject AS CHARACTER NO-UNDO.
  1662. ASSIGN
  1663. pcLink = REPLACE(pcLink,'-':U,'':U)
  1664. cEvents = DYNAMIC-FUNCTION("get":U + pcLink + "Events":U IN TARGET-PROCEDURE)
  1665. cLinkedObject = DYNAMIC-FUNCTION("get":U + pcLink IN TARGET-PROCEDURE)
  1666. NO-ERROR.
  1667. IF ERROR-STATUS:ERROR THEN
  1668. RETURN 'adm-error':U. /* ?? */
  1669. CASE pcState:
  1670. WHEN 'remove':U THEN
  1671. DO:
  1672. /* 'Remove' is only allowed if the get<link> is pointing to the object */
  1673. IF NOT CAN-DO(cLinkedObject,STRING(phObject)) THEN
  1674. RETURN.
  1675. END.
  1676. /* 'Add' is only allowed if get<link> matches the passed object */
  1677. WHEN 'add':U THEN
  1678. DO:
  1679. IF NOT CAN-DO(cLinkedObject,STRING(phObject)) THEN
  1680. RETURN.
  1681. END.
  1682. /* 'Active' is only allowed if get<Link> matches the passed object
  1683. and the link is previously inactivated */
  1684. WHEN 'active':U THEN
  1685. DO:
  1686. IF NOT CAN-DO(cLinkedObject,STRING(phObject)) THEN
  1687. RETURN.
  1688. IF NOT DYNAMIC-FUNCTION('isLinkInactive':U IN TARGET-PROCEDURE,pcLink,phObject) THEN
  1689. RETURN.
  1690. DYNAMIC-FUNCTION('modifyInactiveLinks':U IN TARGET-PROCEDURE,
  1691. 'REMOVE':U,pcLink,phObject).
  1692. END.
  1693. /* 'inactive' is only allowed if get<Link> matches the passed object
  1694. is not previously inactivated: ObjectActive=yes */
  1695. WHEN 'inactive':U THEN
  1696. DO:
  1697. IF NOT CAN-DO(cLinkedObject,STRING(phObject)) THEN
  1698. RETURN.
  1699. IF DYNAMIC-FUNCTION('isLinkInactive':U IN TARGET-PROCEDURE,pcLink,phObject) THEN
  1700. RETURN.
  1701. DYNAMIC-FUNCTION('modifyInactiveLinks':U IN TARGET-PROCEDURE,
  1702. 'ADD':U,pcLink,phObject).
  1703. END.
  1704. END CASE.
  1705. IF VALID-HANDLE(phObject) THEN
  1706. DO:
  1707. DO iEvent = 1 TO NUM-ENTRIES(cEvents):
  1708. /* Never activate/deactivate linkstate */
  1709. IF ENTRY(iEvent, cEvents) <> 'LinkState':U OR CAN-DO('REMOVE,ADD':U, pcState) THEN
  1710. DO:
  1711. IF CAN-DO('ACTIVE,ADD':U, pcState) THEN
  1712. SUBSCRIBE PROCEDURE TARGET-PROCEDURE TO ENTRY(iEvent, cEvents) IN phObject.
  1713. IF CAN-DO('INACTIVE,REMOVE':U, pcState) THEN
  1714. UNSUBSCRIBE PROCEDURE TARGET-PROCEDURE TO ENTRY(iEvent, cEvents) IN phObject.
  1715. END.
  1716. END.
  1717. END.
  1718. RETURN.
  1719. END PROCEDURE.
  1720. /* _UIB-CODE-BLOCK-END */
  1721. &ANALYZE-RESUME
  1722. &ENDIF
  1723. &IF DEFINED(EXCLUDE-modifyListProperty) = 0 &THEN
  1724. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE modifyListProperty Procedure
  1725. PROCEDURE modifyListProperty :
  1726. /*------------------------------------------------------------------------------
  1727. Purpose: Allows values to be added or deleted from any object property
  1728. which is a comma-separated list (SupportedLinks, etc.)
  1729. Parameters: INPUT phCaller AS HANDLE -- handle of the object whose
  1730. property is being changed
  1731. INPUT pcMode AS CHARACTER -- 'ADD' or 'REMOVE'
  1732. INPUT pcListName AS CHARACTER -- name of the property
  1733. INPUT pcListvalue AS CHARACTER -- the value to add or remove
  1734. Notes: This is the ADM2 equivalent of what was modify-list-attribute
  1735. ------------------------------------------------------------------------------*/
  1736. DEFINE INPUT PARAMETER phCaller AS HANDLE NO-UNDO.
  1737. DEFINE INPUT PARAMETER pcMode AS CHARACTER NO-UNDO.
  1738. DEFINE INPUT PARAMETER pcListName AS CHARACTER NO-UNDO.
  1739. DEFINE INPUT PARAMETER pcListValue AS CHARACTER NO-UNDO.
  1740. DEFINE VARIABLE lAddingValue AS LOGICAL NO-UNDO.
  1741. DEFINE VARIABLE cValueList AS CHARACTER NO-UNDO.
  1742. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  1743. DEFINE VARIABLE iComma AS INTEGER NO-UNDO.
  1744. DEFINE VARIABLE OK AS LOGICAL NO-UNDO.
  1745. IF pcMode = "ADD":U THEN lAddingValue = yes.
  1746. ELSE IF pcMode = "REMOVE":U THEN lAddingValue = no.
  1747. ELSE DO:
  1748. showMessage
  1749. ({fnarg messageNumber 82}).
  1750. RETURN ERROR.
  1751. END.
  1752. cValueList = dynamic-function("get":U + TRIM(pcListName) IN phCaller) NO-ERROR.
  1753. IF cValueList = ? THEN
  1754. DO:
  1755. /* If the property isn't defined we have to initialize it with the added values first.*/
  1756. IF lAddingValue THEN
  1757. OK = dynamic-function("set":U + pcListName IN phCaller, pcListValue) NO-ERROR.
  1758. /* NO-ERROR clause is added in case the property doesn't exist */
  1759. RETURN.
  1760. END.
  1761. iValue = LOOKUP(pcListValue, cValueList).
  1762. /* Removing a value that's not there or adding a value that *is* there: */
  1763. IF (iValue = 0 AND not lAddingValue)
  1764. OR (iValue NE 0 AND lAddingValue)
  1765. THEN RETURN. /* -> Nothing to do. */
  1766. ELSE IF lAddingValue THEN /* New item is added to the list */
  1767. cValueList = cValueList + /* (or is the only thing in the list) */
  1768. (IF cValueList NE "":U THEN ",":U ELSE "":U)
  1769. + pcListValue.
  1770. ELSE /* Removing a value */
  1771. ASSIGN cValueList = ',':U + cValueList + ',':U
  1772. cValueList = REPLACE(cValueList,
  1773. ',':U + ENTRY(iValue + 1, cValueList) + ',':U,
  1774. ',':U)
  1775. cValueList = SUBSTR(cValueList, 2, LENGTH(cValueList) - 2,
  1776. "CHARACTER":U).
  1777. /* Reset the attribute value. */
  1778. dynamic-function("set":U + pcListName IN phCaller, cValueList).
  1779. RETURN.
  1780. END PROCEDURE.
  1781. /* _UIB-CODE-BLOCK-END */
  1782. &ANALYZE-RESUME
  1783. &ENDIF
  1784. &IF DEFINED(EXCLUDE-modifyUserLinks) = 0 &THEN
  1785. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE modifyUserLinks Procedure
  1786. PROCEDURE modifyUserLinks :
  1787. /*------------------------------------------------------------------------------
  1788. Purpose: Maintains a delimited list of user-defined links (that is,
  1789. links which are not in the SupportedLinks list for an object),
  1790. and the handle(s) of the object(s) at the other end of the
  1791. links.
  1792. Parameters: INPUT pcMod AS CHARACTER -- 'ADD' or 'REMOVE';
  1793. INPUT pcLinkName AS CHARACTER -- link name including -Source or
  1794. -Target;
  1795. INPUT phObject AS HANDLE -- procedure handle of the object at the
  1796. other end of the link.
  1797. Notes: Run from addLink and removeLink; used primarily by
  1798. the linkHandles function.
  1799. The list is the third entry in ADM-DATA, delimited by CHR(1).
  1800. Each entry in the list consists of a link name followed by
  1801. CHR(4) followed by a comma-separated list of one or
  1802. more handles. The list entries are delimited by CHR(3).
  1803. ------------------------------------------------------------------------------*/
  1804. DEFINE INPUT PARAMETER pcMod AS CHARACTER NO-UNDO.
  1805. DEFINE INPUT PARAMETER pcLinkName AS CHARACTER NO-UNDO.
  1806. DEFINE INPUT PARAMETER phObject AS HANDLE NO-UNDO.
  1807. DEFINE VARIABLE cLinkList AS CHARACTER NO-UNDO.
  1808. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  1809. DEFINE VARIABLE cLinkEntry AS CHARACTER NO-UNDO INIT "":U.
  1810. DEFINE VARIABLE cLinkName AS CHARACTER NO-UNDO.
  1811. DEFINE VARIABLE cHandles AS CHARACTER NO-UNDO.
  1812. DEFINE VARIABLE cNewEntry AS CHARACTER NO-UNDO INIT "":U.
  1813. cLinkList = ENTRY(3, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  1814. DO iLink = 1 TO NUM-ENTRIES(cLinkList, CHR(3)):
  1815. ASSIGN cLinkEntry = ENTRY(iLink, cLinkList, CHR(3))
  1816. cLinkName = ENTRY(1, cLinkEntry, CHR(4)).
  1817. IF cLinkName = pcLinkName THEN
  1818. DO:
  1819. cHandles = ENTRY(2, cLinkEntry, CHR(4)).
  1820. IF pcMod = "ADD":U THEN
  1821. DO:
  1822. /* If this object is already there, just exit. */
  1823. IF LOOKUP(STRING(phObject), cHandles) NE 0 THEN
  1824. RETURN.
  1825. ASSIGN cHandles = cHandles +
  1826. (IF cHandles NE "":U THEN ",":U ELSE "":U) +
  1827. STRING(phObject)
  1828. cNewEntry = pcLinkName + CHR(4) + cHandles.
  1829. LEAVE. /* Our entry was already there and we updated it. */
  1830. END. /* END DO FOR Add */
  1831. ELSE IF pcMod = "REMOVE":U THEN
  1832. DO:
  1833. /* If this object is *not* already there, just exit. */
  1834. IF LOOKUP(STRING(phObject), cHandles) EQ 0 THEN
  1835. RETURN.
  1836. ASSIGN cHandles = REPLACE(",":U + cHandles + ",":U,
  1837. ",":U + STRING(phObject) + ",":U, ",":U)
  1838. cHandles = SUBSTR(cHandles, 2, LENGTH(cHandles) - 2)
  1839. cNewEntry = pcLinkName + CHR(4) + cHandles.
  1840. LEAVE. /* Our entry has been removed. */
  1841. END. /* END DO IF REMOVE */
  1842. END. /* END DO IF cLinkName = pcLinkName */
  1843. ELSE cLinkEntry = "":U.
  1844. END. /* END DO iLink */
  1845. IF cLinkEntry = "":U THEN /* Not there yet; create it for Add */
  1846. DO:
  1847. IF pcMod = "ADD":U THEN
  1848. cNewEntry = pcLinkName + CHR(4) + STRING(phObject).
  1849. ELSE RETURN. /* Or exit if trying to remove and it's not there.*/
  1850. END. /* END DO IF cLinkEntry = "" */
  1851. IF cLinkEntry = "":U THEN /* Just add it to the end */
  1852. TARGET-PROCEDURE:ADM-DATA = TARGET-PROCEDURE:ADM-DATA +
  1853. (IF cLinkList NE "":U THEN CHR(3) ELSE "":U) +
  1854. cNewEntry.
  1855. ELSE TARGET-PROCEDURE:ADM-DATA = REPLACE(TARGET-PROCEDURE:ADM-DATA,
  1856. cLinkEntry, cNewEntry).
  1857. RETURN.
  1858. END PROCEDURE.
  1859. /* _UIB-CODE-BLOCK-END */
  1860. &ANALYZE-RESUME
  1861. &ENDIF
  1862. &IF DEFINED(EXCLUDE-oneObjectLinks) = 0 &THEN
  1863. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE oneObjectLinks Procedure
  1864. PROCEDURE oneObjectLinks PRIVATE :
  1865. /*------------------------------------------------------------------------------
  1866. Purpose: Private procedure called from displayLinks to add links for
  1867. a single object. Recurses down the Container link chain.
  1868. Parameters: hObject AS HANDLE.
  1869. ------------------------------------------------------------------------------*/
  1870. DEFINE INPUT PARAMETER hObject AS HANDLE.
  1871. DEFINE VARIABLE cSupported AS CHARACTER.
  1872. DEFINE VARIABLE iLink AS INTEGER.
  1873. DEFINE VARIABLE cLink AS CHARACTER.
  1874. DEFINE VARIABLE cType AS CHARACTER.
  1875. DEFINE VARIABLE cTargets AS CHARACTER.
  1876. DEFINE VARIABLE iTarget AS INTEGER.
  1877. DEFINE VARIABLE cContainer AS CHARACTER.
  1878. {get SupportedLinks cSupported hObject} NO-ERROR.
  1879. {get ContainerType cContainer hObject} NO-ERROR.
  1880. IF cContainer NE "":U THEN
  1881. cSupported = cSupported + ",Container-Source".
  1882. DO iLink = 1 TO NUM-ENTRIES(cSupported):
  1883. cLink = ENTRY(iLink, cSupported).
  1884. IF INDEX(cLink, 'Source') NE 0 THEN
  1885. DO:
  1886. cType = SUBSTR(cLink, 1, INDEX(cLink, '-') - 1).
  1887. cTargets = dynamic-function('get' + cType + 'Target'
  1888. IN hObject) NO-ERROR.
  1889. DO iTarget = 1 TO NUM-ENTRIES(cTargets):
  1890. CREATE ADMLink.
  1891. ASSIGN LinkType = cType
  1892. LinkSource = hObject
  1893. LinkTarget = WIDGET-HANDLE(ENTRY(iTarget, cTargets)).
  1894. IF cLink = 'Container-Source':U THEN /* recurse on contained objects. */
  1895. RUN oneObjectLinks (LinkTarget).
  1896. END.
  1897. END.
  1898. END.
  1899. END PROCEDURE.
  1900. /* _UIB-CODE-BLOCK-END */
  1901. &ANALYZE-RESUME
  1902. &ENDIF
  1903. &IF DEFINED(EXCLUDE-removeAllLinks) = 0 &THEN
  1904. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE removeAllLinks Procedure
  1905. PROCEDURE removeAllLinks :
  1906. /* ---------------------------------------------------------------------
  1907. Purpose: Removes all links as part of destroying a procedure.
  1908. Parameters: <none>
  1909. Notes: Run automatically as part of destroyObject
  1910. -----------------------------------------------------------------------*/
  1911. DEFINE VARIABLE cSupportedLinks AS CHARACTER NO-UNDO.
  1912. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  1913. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  1914. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  1915. DEFINE VARIABLE cLinkType AS CHARACTER NO-UNDO.
  1916. DEFINE VARIABLE iHyphen AS INTEGER NO-UNDO.
  1917. DEFINE VARIABLE iObject AS INTEGER NO-UNDO.
  1918. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  1919. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  1920. DEFINE VARIABLE cObjects AS CHARACTER NO-UNDO.
  1921. /* If this object is not on page 0, remove the PageN link in its
  1922. container. There is no PageN-Source per se -- it is always the
  1923. Container-Source. */
  1924. {get ObjectPage iPage}.
  1925. IF iPage NE 0 THEN
  1926. DO:
  1927. {get ContainerSource hObject}.
  1928. IF VALID-HANDLE(hObject) THEN
  1929. RUN removePageNTarget IN hObject (TARGET-PROCEDURE, iPage).
  1930. END. /* END DO IF not Page 0 */
  1931. /* remove user-defined links too */
  1932. RUN removeUserLinks IN TARGET-PROCEDURE.
  1933. {get SupportedLinks cSupportedLinks}.
  1934. /* Add standard links which aren't on SupportedLinks to the list. */
  1935. cSupportedLinks = cSupportedLinks +
  1936. (IF cSupportedLinks NE "":U THEN ",":U ELSE "":U) +
  1937. "Container-Source,Container-Target,Page-Source,Page-Target":U.
  1938. DO iLink = 1 TO NUM-ENTRIES(cSupportedLinks):
  1939. assign
  1940. cLink = TRIM(ENTRY(iLink, cSupportedLinks))
  1941. iHyphen = R-INDEX(ENTRY(iLink, cSupportedLinks), "-":U)
  1942. cLinkType = SUBSTR(cLink, 1, iHyphen - 1) /* Base link type */
  1943. cDirection = SUBSTR(cLink, iHyphen + 1) /* Source or Target */
  1944. cObjects = ?.
  1945. IF cDirection = "TARGET":U THEN /* This object is the Target */
  1946. DO:
  1947. /* Note: Can't use {get} for variable properties.*/
  1948. cObjects = dynamic-function("get":U + cLinkType + "Source":U
  1949. IN TARGET-PROCEDURE) NO-ERROR.
  1950. IF cObjects NE ? THEN
  1951. DO iObject = 1 TO NUM-ENTRIES(cObjects): /* May be multiple sources. */
  1952. hObject = WIDGET-HANDLE(ENTRY(iObject, cObjects)).
  1953. IF VALID-HANDLE(hObject) THEN
  1954. RUN removeLink IN TARGET-PROCEDURE
  1955. (hObject, cLinkType, TARGET-PROCEDURE).
  1956. END. /* DO iObject */
  1957. END. /* END This object is the Target */
  1958. ELSE DO: /* This object is the Source */
  1959. cObjects = dynamic-function("get":U + cLinkType + "Target":U
  1960. IN TARGET-PROCEDURE) NO-ERROR.
  1961. IF cObjects NE ? THEN /* Might be unknown if no prop function. */
  1962. DO iObject = 1 TO NUM-ENTRIES(cObjects): /* May be multiple targets. */
  1963. hObject = WIDGET-HANDLE(ENTRY(iObject, cObjects)).
  1964. IF VALID-HANDLE(hObject) THEN
  1965. RUN removeLink IN TARGET-PROCEDURE
  1966. (TARGET-PROCEDURE, cLinkType, hObject).
  1967. END. /* END DO iObject */
  1968. END. /* END This object is the Source */
  1969. END. /* END Processing for SupportedLinks */
  1970. RETURN.
  1971. END PROCEDURE.
  1972. /* _UIB-CODE-BLOCK-END */
  1973. &ANALYZE-RESUME
  1974. &ENDIF
  1975. &IF DEFINED(EXCLUDE-removeLink) = 0 &THEN
  1976. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE removeLink Procedure
  1977. PROCEDURE removeLink :
  1978. /* ---------------------------------------------------------------------
  1979. Purpose: Removes a specific link between two objects.
  1980. Parameters: INPUT phSource AS HANDLE -- source procedure handle,
  1981. INPUT pcLink AS CHARACTER -- link type name,
  1982. INPUT phTarget AS HANDLE -- link target object handle
  1983. -----------------------------------------------------------------------*/
  1984. DEFINE INPUT PARAMETER phSource AS HANDLE NO-UNDO.
  1985. DEFINE INPUT PARAMETER pcLink AS CHARACTER NO-UNDO.
  1986. DEFINE INPUT PARAMETER phTarget AS HANDLE NO-UNDO.
  1987. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  1988. DEFINE VARIABLE iEvent AS INTEGER NO-UNDO.
  1989. DEFINE VARIABLE cSources AS CHARACTER NO-UNDO.
  1990. DEFINE VARIABLE cTargets AS CHARACTER NO-UNDO.
  1991. /* If this isn't a recognized link, just delete the single subscription
  1992. of the name. Do this only if neither side supports the link. */
  1993. {get SupportedLinks cSources phSource}.
  1994. {get SupportedLinks cTargets phTarget}.
  1995. IF (pcLink NE "Container":U AND NOT pcLink BEGINS "Page":U) AND
  1996. (LOOKUP(pcLink + "-Source":U, cSources) = 0 AND
  1997. LOOKUP(pcLink + "-Target":U, cTargets) = 0) THEN
  1998. DO:
  1999. UNSUBSCRIBE PROCEDURE phTarget TO pcLink IN phSource.
  2000. /* Because there are no "Source" and "Target" properties for
  2001. these "dynamic" links, we need to store the handles where
  2002. the linkHandles function will be able to get at them later,
  2003. if needed. */
  2004. RUN modifyUserLinks IN phSource ('REMOVE':U, pcLink + "-Target":U,
  2005. phTarget).
  2006. RUN modifyUserLinks IN phTarget ('REMOVE':U, pcLink + "-Source":U,
  2007. phSource).
  2008. RETURN.
  2009. END. /* END DO for non-Supported Link */
  2010. /* The remaining code is for standard SupportedLinks. */
  2011. /* UNSUBSCRIBE to all the appropriate events on each side of the old link.
  2012. First UNSUBSCRIBE the target. */
  2013. RUN linkStateHandler IN phTarget ('Remove':U,
  2014. phSource,
  2015. pcLink + "Source":U).
  2016. /* UNSUBSCRIBE the source. */
  2017. RUN linkStateHandler IN phSource ('Remove':U,
  2018. phTarget,
  2019. pcLink + "Target":U).
  2020. /* We must be prepared for the Source or Target link to be a list
  2021. of more than one object. */
  2022. IF dynamic-function('propertyType':U IN phTarget, pcLink + "Source":U)
  2023. = "CHARACTER":U THEN
  2024. RUN modifyListProperty (phTarget, 'REMOVE':U, pcLink + "Source":U,
  2025. STRING(phSource)).
  2026. ELSE dynamic-function("set":U + pcLink + "Source":U IN phTarget, ?)
  2027. NO-ERROR. /* Remove the Source -- don't complain if it's not there. */
  2028. IF dynamic-function('propertyType':U IN phSource, pcLink + "Target":U)
  2029. = "CHARACTER":U THEN
  2030. RUN modifyListProperty (phSource, 'REMOVE':U, pcLink + "Target":U,
  2031. STRING(phTarget)).
  2032. ELSE dynamic-function("set":U + pcLink + "Target":U IN phSource, ?)
  2033. NO-ERROR. /* Remove the Target -- don't complain if it's not there. */
  2034. RETURN.
  2035. END PROCEDURE.
  2036. /* _UIB-CODE-BLOCK-END */
  2037. &ANALYZE-RESUME
  2038. &ENDIF
  2039. &IF DEFINED(EXCLUDE-removeUserLinks) = 0 &THEN
  2040. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE removeUserLinks Procedure
  2041. PROCEDURE removeUserLinks :
  2042. /*------------------------------------------------------------------------------
  2043. Purpose: Remove all user-defined links. This routine will normally be called
  2044. when an object is deleted. Not only do we want to delete it's links
  2045. but we need to delete the links to it that other objects have.
  2046. So, for instance, if user links for the deleted object has a link
  2047. such as
  2048. "Mylink-target,<handlex>"
  2049. then we need to delete a corresponding link "mylink-source,handley"
  2050. in the object identified by 'handlex'. Note: in this example,
  2051. 'handley' is the object that is being deleted.
  2052. Parameters: <none>
  2053. Notes:
  2054. ------------------------------------------------------------------------------*/
  2055. DEFINE VARIABLE clinklist AS CHARACTER NO-UNDO.
  2056. DEFINE VARIABLE ilink AS INTEGER NO-UNDO.
  2057. DEFINE VARIABLE iHandle AS INTEGER NO-UNDO.
  2058. DEFINE VARIABLE clinkentry AS CHARACTER NO-UNDO.
  2059. DEFINE VARIABLE clinkname AS CHARACTER NO-UNDO.
  2060. DEFINE VARIABLE chandles AS CHARACTER NO-UNDO.
  2061. DEFINE VARIABLE hObj AS HANDLE NO-UNDO.
  2062. /* get the User-defined links list from adm-data */
  2063. cLinkList = ENTRY(3, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  2064. /* loop through all of the user-defined links for this object
  2065. * and find out what other objects have links to the current object.
  2066. * Then call a routine to remove those links in those objects.
  2067. */
  2068. DO iLink = 1 TO NUM-ENTRIES(cLinkList, CHR(3)):
  2069. ASSIGN cLinkEntry = ENTRY(iLink, cLinkList, CHR(3))
  2070. cLinkName = ENTRY(1, cLinkEntry, CHR(4))
  2071. cHandles = ENTRY(2, cLinkEntry, CHR(4)).
  2072. /* if the link is "mylink-target" for the current object, then
  2073. * we need to delete "mylink-source" in the other object (and
  2074. * vice-versa). So we make the substitution here.
  2075. */
  2076. IF R-INDEX(cLinkName,"-Target":U) NE 0
  2077. THEN clinkname = REPLACE(cLinkName,"-Target":U, "-Source":U).
  2078. ELSE IF R-INDEX(clinkName,"-Source":U) NE 0
  2079. THEN clinkname = REPLACE(cLinkName,"-Source":U,"-Target":U).
  2080. /* remove the link on behalf of the other object */
  2081. DO iHandle = 1 TO NUM-ENTRIES(cHandles,",":U):
  2082. hObj = WIDGET-HANDLE(ENTRY(iHandle,cHandles,",":U)).
  2083. IF VALID-HANDLE(hobj) THEN
  2084. RUN modifyUserLinks IN hObj ('Remove':U, cLinkName, TARGET-PROCEDURE).
  2085. END.
  2086. END.
  2087. /* When all done, set the target-procedure's user-defined link list to null.
  2088. * Note: we could have deleted each handle one by one using modifyUserLinks
  2089. * for the target-procedure's list but setting the whole entry to NULL is easier
  2090. * and cleaner. To do it the other way, we need to make sure
  2091. * we detect the case where there are no handles (just a link name) in the list.
  2092. */
  2093. ASSIGN
  2094. cLinkList = TARGET-PROCEDURE:ADM-DATA
  2095. ENTRY(3,cLinkList,CHR(1)) = "":U
  2096. TARGET-PROCEDURE:ADM-DATA = cLinkList.
  2097. END PROCEDURE.
  2098. /* _UIB-CODE-BLOCK-END */
  2099. &ANALYZE-RESUME
  2100. &ENDIF
  2101. &IF DEFINED(EXCLUDE-repositionObject) = 0 &THEN
  2102. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE repositionObject Procedure
  2103. PROCEDURE repositionObject :
  2104. /*------------------------------------------------------------------------------
  2105. Purpose:
  2106. Parameters: <none>
  2107. Notes:
  2108. ------------------------------------------------------------------------------*/
  2109. DEFINE INPUT PARAMETER pdRow AS DECIMAL NO-UNDO.
  2110. DEFINE INPUT PARAMETER pdCol AS DECIMAL NO-UNDO.
  2111. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  2112. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  2113. {get ContainerHandle hContainer}.
  2114. IF VALID-HANDLE(hContainer) THEN
  2115. DO:
  2116. IF hContainer:TYPE = "WINDOW":U THEN
  2117. DO:
  2118. IF pdRow = 0 THEN
  2119. pdRow = (SESSION:HEIGHT-CHARS - hContainer:HEIGHT-CHARS) / 2.
  2120. IF pdCol = 0 THEN
  2121. pdCol = (SESSION:WIDTH-CHARS - hContainer:WIDTH-CHARS) / 2.
  2122. END.
  2123. /* A Dialog naturally centers on its parent and positions relative
  2124. to its parent, so we must adjust for that. */
  2125. ELSE IF hContainer:TYPE = "DIALOG-BOX":U THEN
  2126. DO:
  2127. hParent = hContainer:PARENT.
  2128. IF pdRow = 0 THEN
  2129. pdRow = ((SESSION:HEIGHT-CHARS - hContainer:HEIGHT-CHARS) / 2) - hParent:ROW.
  2130. IF pdCol = 0 THEN
  2131. pdCol = ((SESSION:WIDTH-CHARS - hContainer:WIDTH-CHARS) / 2) - hParent:COL.
  2132. END.
  2133. /* If the row or column wound up being between 0 and 1 after the
  2134. calculation, change it, because otherwise Progress will complain. */
  2135. IF pdRow GE 0 AND pdRow < 1 THEN pdRow = 1.
  2136. IF pdCol GE 0 AND pdCol < 1 THEN pdCol = 1.
  2137. ASSIGN hContainer:ROW = pdRow
  2138. hContainer:COLUMN = pdCol
  2139. NO-ERROR.
  2140. END.
  2141. RETURN.
  2142. END PROCEDURE.
  2143. /* _UIB-CODE-BLOCK-END */
  2144. &ANALYZE-RESUME
  2145. &ENDIF
  2146. &IF DEFINED(EXCLUDE-returnFocus) = 0 &THEN
  2147. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE returnFocus Procedure
  2148. PROCEDURE returnFocus :
  2149. /*------------------------------------------------------------------------------
  2150. Purpose: returns focus to the containing window
  2151. Parameters: hTarget - a handle to the target procedure object
  2152. Notes:
  2153. ------------------------------------------------------------------------------*/
  2154. DEF INPUT PARAM hTarget AS HANDLE NO-UNDO.
  2155. DEFINE VARIABLE cUIBMode AS CHAR NO-UNDO.
  2156. DEFINE VARIABLE hCntSrc AS HANDLE NO-UNDO.
  2157. DEFINE VARIABLE hCntWidget AS HANDLE NO-UNDO.
  2158. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  2159. &SCOPED-DEFINE xp-assign
  2160. {get UIBMode cUIBMode hTarget}
  2161. {get ContainerHandle hCntWidget hTarget}. /* This object's widget container */
  2162. &UNDEFINE xp-assign
  2163. IF cUIBMode NE "DESIGN":U AND VALID-HANDLE(hCntWidget)
  2164. AND hCntWidget:TYPE EQ "WINDOW":U THEN
  2165. DO:
  2166. {get ContainerSource hCntSrc hTarget}. /* Container Source's procedure handle */
  2167. IF VALID-HANDLE(hCntSrc) THEN
  2168. DO:
  2169. {get ContainerHandle hCntWidget hCntSrc}. /* Container Source's widget container */
  2170. END.
  2171. IF VALID-HANDLE(hCntWidget) THEN
  2172. APPLY "ENTRY":U TO hCntWidget.
  2173. END.
  2174. END PROCEDURE.
  2175. /* _UIB-CODE-BLOCK-END */
  2176. &ANALYZE-RESUME
  2177. &ENDIF
  2178. &IF DEFINED(EXCLUDE-returnNothing) = 0 &THEN
  2179. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE returnNothing Procedure
  2180. PROCEDURE returnNothing :
  2181. /*------------------------------------------------------------------------------
  2182. Purpose: Clean return value...
  2183. Parameters: <none>
  2184. Notes: The use of return-value for error is a problem as there now is no
  2185. safe place to reset it.
  2186. - commitTransaction is calling this if necessary to ensure that
  2187. old return-values does not cause issues for customer code.
  2188. ------------------------------------------------------------------------------*/
  2189. RETURN.
  2190. END PROCEDURE.
  2191. /* _UIB-CODE-BLOCK-END */
  2192. &ANALYZE-RESUME
  2193. &ENDIF
  2194. &IF DEFINED(EXCLUDE-showDataMessagesProcedure) = 0 &THEN
  2195. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE showDataMessagesProcedure Procedure
  2196. PROCEDURE showDataMessagesProcedure :
  2197. /*------------------------------------------------------------------------------
  2198. Purpose: Returns the name of the field (if any) from the first
  2199. error message, to allow the caller to use it to position the
  2200. cursor.
  2201. Parameters: <none>
  2202. Notes: Invokes fetchMessages() to retrieve all messages stored in the
  2203. class property gcMessages.
  2204. (normally database update-related error messages), and
  2205. displays them in an alert-box of type error.
  2206. This function expects to receive back a single string
  2207. from fetchMessages with one or more messages delimited by CHR(3),
  2208. and within each message the message text, Fieldname (or blank) +
  2209. a Tablename (or blank), delimited by CHR(4) if present.
  2210. ------------------------------------------------------------------------------*/
  2211. DEFINE OUTPUT PARAMETER pcReturn AS CHARACTER.
  2212. DEFINE VARIABLE cMessages AS CHARACTER NO-UNDO.
  2213. DEFINE VARIABLE iMsg AS INTEGER NO-UNDO.
  2214. DEFINE VARIABLE iMsgCnt AS INTEGER NO-UNDO.
  2215. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  2216. DEFINE VARIABLE cFirstField AS CHARACTER NO-UNDO.
  2217. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  2218. DEFINE VARIABLE cTable AS CHARACTER NO-UNDO.
  2219. DEFINE VARIABLE cText AS CHARACTER NO-UNDO INIT "":U.
  2220. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  2221. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  2222. DEFINE VARIABLE cIgnore AS CHARACTER NO-UNDO.
  2223. DEFINE VARIABLE lIgnore AS LOGICAL NO-UNDO.
  2224. DEFINE VARIABLE cSummary AS CHARACTER NO-UNDO.
  2225. DEFINE VARIABLE cParentType AS CHARACTER NO-UNDO.
  2226. DEFINE VARIABLE cFocusType AS CHARACTER NO-UNDO.
  2227. ASSIGN cMessages = DYNAMIC-FUNCTION('fetchMessages':U IN TARGET-PROCEDURE).
  2228. /* Issue 6945 - we need to detect if a browse cell is involved */
  2229. IF VALID-HANDLE(FOCUS) THEN
  2230. ASSIGN cParentType = FOCUS:PARENT:TYPE
  2231. cFocusType = FOCUS:TYPE.
  2232. {get ContainerHandle hContainer}.
  2233. /* If we're running Dynamics, and a dialog is not involved, and there is
  2234. no function in the call stack, and we're not in an updatable field in a
  2235. browser we can just send the message to the session manager to display.
  2236. We want to avoid calling afmessagep in the session manager in this scenario,
  2237. as each call to it will result in an Appserver hit, and showMessages is
  2238. going to run afmessagep anyway. */
  2239. IF cMessages <> "":U
  2240. AND NOT {fnarg IsDialogBoxParent hContainer}
  2241. AND NOT {fn IsFunctionInCallStack}
  2242. AND NOT (cFocusType = 'FILL-IN' AND cParentType BEGINS 'BROWSE':U) /* 6945 */
  2243. AND VALID-HANDLE(gshSessionManager) THEN
  2244. DO:
  2245. DEFINE VARIABLE cButtonPressed AS CHARACTER NO-UNDO.
  2246. {get ContainerSource hContainerSource}.
  2247. /* Dynamics showMessages handles message list in raw form */
  2248. RUN showMessages IN gshSessionManager (
  2249. INPUT cMessages, /* pcMessageList */
  2250. INPUT "ERR", /* pcMessageType */
  2251. INPUT "OK", /* pcButtonList */
  2252. INPUT "OK", /* pcDefaultButton */
  2253. INPUT "", /* pcCancelButton */
  2254. INPUT "ADM2Message", /* pcMessageTitle */
  2255. INPUT TRUE, /* plDisplayEmpty */
  2256. INPUT hContainerSource, /* phContainer */
  2257. OUTPUT cButtonPressed /* pcButtonPressed */
  2258. ).
  2259. /* Return the field name from the first error message so the caller can
  2260. use it to position the cursor. */
  2261. ASSIGN cMessage = ENTRY(1, cMessages, CHR(3))
  2262. cFirstField = IF NUM-ENTRIES(cMessage, CHR(4)) > 1
  2263. THEN ENTRY(2, cMessage, CHR(4))
  2264. ELSE "":U.
  2265. END.
  2266. ELSE
  2267. DO:
  2268. iMsgCnt = NUM-ENTRIES(cMessages, CHR(3)).
  2269. msgCnt_blk:
  2270. DO iMsg = 1 TO iMsgCnt:
  2271. /* Format a string of messages; each has a first line of
  2272. "Field: <field> "Table: <table>"
  2273. (if either of these is defined) plus the error message on a
  2274. separate line. */
  2275. ASSIGN cMessage = ENTRY(iMsg, cMessages, CHR(3))
  2276. cField = IF NUM-ENTRIES(cMessage, CHR(4)) > 1
  2277. THEN ENTRY(2, cMessage, CHR(4))
  2278. ELSE "":U
  2279. cTable = IF NUM-ENTRIES(cMessage, CHR(4)) > 2
  2280. THEN ENTRY(3, cMessage, CHR(4))
  2281. ELSE "":U
  2282. .
  2283. /* Is Dynamics running? If so then run the messages through the standard message routine.
  2284. This will ensure that the messages are translated and correctly formatted. */
  2285. IF VALID-HANDLE(gshSessionManager) THEN
  2286. /* We are only interested in getting the summary message here.
  2287. Ignore all other parameters. */
  2288. RUN afmessagep IN gshSessionManager ( INPUT cMessage,
  2289. INPUT "":U,
  2290. INPUT "":U,
  2291. OUTPUT cSummary,
  2292. OUTPUT cIgnore,
  2293. OUTPUT cIgnore,
  2294. OUTPUT cIgnore,
  2295. OUTPUT lIgnore,
  2296. OUTPUT lIgnore ).
  2297. else
  2298. cSummary = entry(1,cMessage,chr(4)).
  2299. ASSIGN cText = cText
  2300. + (IF cField NE "":U
  2301. THEN DYNAMIC-FUNCTION('messageNumber':U IN TARGET-PROCEDURE, 10) + cField + " ":U
  2302. ELSE "":U)
  2303. + (IF cTable NE "":U
  2304. THEN DYNAMIC-FUNCTION('messageNumber':U IN TARGET-PROCEDURE, 11) + cTable
  2305. ELSE "":U)
  2306. + (IF cField NE "":U OR cTable NE "":U THEN "~n":U + " ":U ELSE "":U)
  2307. + cSummary + "~n":U.
  2308. /* since we are displaying in a resizable dialog we can afford a blank line between fields */
  2309. IF TRIM(cText) <> "" THEN ASSIGN cText = cText + "~n".
  2310. /* Return the field name from the first error message so the caller can
  2311. use it to position the cursor. */
  2312. IF iMsg = 1 THEN cFirstField = cField.
  2313. END. /* END DO iMsg */
  2314. /* Either Dynamics is not connected, or we couldn't use the standard Dynamics message window.
  2315. Either way, display the message using the standard 4GL MESSAGE statement. */
  2316. IF cText NE "":U AND cMessages <> "":U THEN
  2317. MESSAGE cText VIEW-AS ALERT-BOX ERROR TITLE "Data Error".
  2318. END.
  2319. pcReturn = cFirstField.
  2320. RETURN.
  2321. END PROCEDURE.
  2322. /* _UIB-CODE-BLOCK-END */
  2323. &ANALYZE-RESUME
  2324. &ENDIF
  2325. &IF DEFINED(EXCLUDE-showMessageProcedure) = 0 &THEN
  2326. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE showMessageProcedure Procedure
  2327. PROCEDURE showMessageProcedure :
  2328. /*------------------------------------------------------------------------------
  2329. Purpose: Astra 2 override for showMessage function to use Astra 2 message
  2330. handling routines.
  2331. Displays (using a simple MESSAGE statement by default)
  2332. either a literal message string, or a message number which
  2333. is returned by the messageNumber function.
  2334. Parameters: INPUT pcMessage AS CHARACTER --
  2335. - Either a literal message string
  2336. - Or a message number in character form.
  2337. A message number can be followed by a comma delimited list
  2338. with maximum 10 entries:
  2339. The LAST entry (2 - 10) is:
  2340. 1) The word "Question" or "YesNo", in which case the message is
  2341. displayed with YES-NO buttons and the answer is returned.
  2342. 2) The word "YesNoCancel", in which case the message is displayed
  2343. with YES-NO-CANCEL buttons and the answer is returned.
  2344. 3) The word "OkCancel", in which case the message is displayed
  2345. with OK-CANCEL buttons and the answer is returned.
  2346. Optional entries from 2 to 10:
  2347. Each entry will be placed into the numeric message
  2348. in place of the the string of form &n, where n is an integer
  2349. between 1 and 9, inclusive (Entry 2 will replace &1 etc)
  2350. Returns: LOGICAL: true/false if the Question option is used,
  2351. true/false/unknown if the YesNoCancel option is used
  2352. else true.
  2353. Notes: This function can be overridden to use a mechanism other than
  2354. the MESSAGE statement to display messages, and still use the
  2355. messageNumber function to map message numbers to translatable text.
  2356. Note that this is different from addMessage, fetchMessages, etc.,
  2357. which log messages in a temp-table for later retrieval.
  2358. ------------------------------------------------------------------------------*/
  2359. DEFINE INPUT PARAMETER pcMessage AS CHARACTER NO-UNDO.
  2360. DEFINE OUTPUT PARAMETER plAnswer AS LOGICAL NO-UNDO.
  2361. DEFINE VARIABLE iMessage AS INTEGER NO-UNDO.
  2362. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  2363. DEFINE VARIABLE cMessageType AS CHARACTER NO-UNDO.
  2364. DEFINE VARIABLE cMsg AS CHARACTER EXTENT 9 NO-UNDO.
  2365. DEFINE VARIABLE iNumParam AS INT NO-UNDO.
  2366. DEFINE VARIABLE lAnswer AS LOGICAL NO-UNDO.
  2367. DEFINE VARIABLE cAnswer AS CHARACTER.
  2368. DEFINE VARIABLE cButtonPressed AS CHARACTER.
  2369. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  2370. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  2371. &SCOPED-DEFINE xp-assign
  2372. {get ContainerSource hContainerSource}
  2373. {get ContainerHandle hContainer}.
  2374. &UNDEFINE xp-assign
  2375. iMessage = INTEGER(ENTRY(1,pcMessage)) NO-ERROR. /* was a number passed? */
  2376. IF ERROR-STATUS:ERROR THEN
  2377. MESSAGE pcMessage VIEW-AS ALERT-BOX INFORMATION. /* No -- use the literal text */
  2378. ELSE DO: /* A numeric message */
  2379. ASSIGN
  2380. cMessage = DYNAMIC-FUNCTION("messageNumber" IN TARGET-PROCEDURE, INPUT iMessage)
  2381. iNumParam = NUM-ENTRIES(pcMessage)
  2382. cMessageType = ENTRY(iNumParam,pcMessage)
  2383. cMsg[1] = IF iNumParam > 1 THEN ENTRY(2,pcMessage) ELSE "":U
  2384. cMsg[2] = IF iNumParam > 2 THEN ENTRY(3,pcMessage) ELSE "":U
  2385. cMsg[3] = IF iNumParam > 3 THEN ENTRY(4,pcMessage) ELSE "":U
  2386. cMsg[4] = IF iNumParam > 4 THEN ENTRY(5,pcMessage) ELSE "":U
  2387. cMsg[5] = IF iNumParam > 5 THEN ENTRY(6,pcMessage) ELSE "":U
  2388. cMsg[6] = IF iNumParam > 6 THEN ENTRY(7,pcMessage) ELSE "":U
  2389. cMsg[7] = IF iNumParam > 7 THEN ENTRY(8,pcMessage) ELSE "":U
  2390. cMsg[8] = IF iNumParam > 8 THEN ENTRY(9,pcMessage) ELSE "":U
  2391. cMsg[9] = IF iNumParam > 9 THEN ENTRY(10,pcMessage) ELSE "":U
  2392. cMessage = SUBSTITUTE(cMessage,
  2393. cMsg[1],cMsg[2],cMsg[3],cMsg[4],cMsg[5],
  2394. cMsg[6],cMsg[7],cMsg[8],cMsg[9]).
  2395. /* Yes -- get the msg */
  2396. CASE cMessageType:
  2397. WHEN 'Question':U OR WHEN 'YesNo':U THEN
  2398. DO:
  2399. IF NOT {fnarg IsDialogBoxParent hContainer}
  2400. AND NOT {fn IsFunctionInCallStack}
  2401. AND VALID-HANDLE(gshSessionManager) THEN
  2402. DO:
  2403. RUN askQuestion IN gshSessionManager (
  2404. INPUT cMessage, /* pcMessageList */
  2405. INPUT "Yes,No", /* pcButtonList */
  2406. INPUT "YES", /* pcDefaultButton */
  2407. INPUT "NO", /* pcCancelButton */
  2408. INPUT "Question", /* pcMessageTitle */
  2409. INPUT "", /* pcDataType */
  2410. INPUT "", /* pcFormat */
  2411. INPUT-OUTPUT cAnswer, /* pcAnswer */
  2412. OUTPUT cButtonPressed /* pcButtonPressed */
  2413. ) NO-ERROR.
  2414. CASE cButtonPressed:
  2415. WHEN "YES" THEN lAnswer = TRUE.
  2416. WHEN "NO" THEN lAnswer = FALSE.
  2417. END CASE.
  2418. END.
  2419. ELSE DO:
  2420. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO
  2421. UPDATE lAnswer.
  2422. END.
  2423. plAnswer = lAnswer.
  2424. RETURN.
  2425. END.
  2426. WHEN 'OkCancel':U THEN
  2427. DO:
  2428. IF NOT {fnarg IsDialogBoxParent hContainer}
  2429. AND NOT {fn IsFunctionInCallStack}
  2430. AND VALID-HANDLE(gshSessionManager) THEN
  2431. DO:
  2432. RUN askQuestion IN gshSessionManager (
  2433. INPUT cMessage, /* pcMessageList */
  2434. INPUT "Ok,Cancel", /* pcButtonList */
  2435. INPUT "YES", /* pcDefaultButton */
  2436. INPUT "NO", /* pcCancelButton */
  2437. INPUT "Question", /* pcMessageTitle */
  2438. INPUT "", /* pcDataType */
  2439. INPUT "", /* pcFormat */
  2440. INPUT-OUTPUT cAnswer, /* pcAnswer */
  2441. OUTPUT cButtonPressed /* pcButtonPressed */
  2442. ) NO-ERROR.
  2443. CASE cButtonPressed:
  2444. WHEN "OK" THEN lAnswer = TRUE.
  2445. WHEN "CANCEL" THEN lAnswer = FALSE.
  2446. END CASE.
  2447. END.
  2448. ELSE DO:
  2449. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS OK-CANCEL
  2450. UPDATE lAnswer.
  2451. END.
  2452. planswer = lAnswer.
  2453. RETURN.
  2454. END.
  2455. WHEN 'YesNoCancel':U THEN
  2456. DO:
  2457. IF NOT {fnarg IsDialogBoxParent hContainer}
  2458. AND NOT {fn IsFunctionInCallStack}
  2459. AND VALID-HANDLE(gshSessionManager) THEN
  2460. DO:
  2461. RUN askQuestion IN gshSessionManager (
  2462. INPUT cMessage, /* pcMessageList */
  2463. INPUT "Yes,No,Cancel", /* pcButtonList */
  2464. INPUT "CANCEL", /* pcDefaultButton */
  2465. INPUT "Cancel", /* pcCancelButton */
  2466. INPUT "Question", /* pcMessageTitle */
  2467. INPUT "", /* pcDataType */
  2468. INPUT "", /* pcFormat */
  2469. INPUT-OUTPUT cAnswer, /* pcAnswer */
  2470. OUTPUT cBUttonPressed /* pcButtonPressed */
  2471. ).
  2472. CASE cButtonPressed:
  2473. WHEN "YES" THEN lAnswer = TRUE.
  2474. WHEN "NO" THEN lAnswer = FALSE.
  2475. WHEN "CANCEL" THEN lAnswer = ?.
  2476. END CASE.
  2477. END.
  2478. ELSE DO:
  2479. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO-CANCEL
  2480. UPDATE lAnswer.
  2481. END.
  2482. plAnswer = lAnswer.
  2483. RETURN.
  2484. END.
  2485. OTHERWISE
  2486. DO:
  2487. IF NOT {fnarg IsDialogBoxParent hContainer}
  2488. AND NOT {fn IsFunctionInCallStack}
  2489. AND VALID-HANDLE(gshSessionManager) THEN
  2490. DO:
  2491. RUN showMessages IN gshSessionManager (
  2492. INPUT cMessage, /* pcMessageList */
  2493. INPUT "INF", /* pcMessageType */
  2494. INPUT "OK", /* pcButtonList */
  2495. INPUT "OK", /* pcDefaultButton */
  2496. INPUT "", /* pcCancelButton */
  2497. INPUT "Information", /* pcMessageTitle */
  2498. INPUT TRUE, /* plDisplayEmpty */
  2499. INPUT hContainerSource, /* phContainer */
  2500. OUTPUT cButtonPressed /* pcButtonPressed */
  2501. ).
  2502. END.
  2503. ELSE DO:
  2504. MESSAGE cMessage VIEW-AS ALERT-BOX INFORMATION.
  2505. END.
  2506. END.
  2507. END CASE.
  2508. END. /* END ELSE IF numeric message */
  2509. plAnswer = TRUE.
  2510. RETURN. /* Return value not meaningful in this case. */
  2511. END PROCEDURE.
  2512. /* _UIB-CODE-BLOCK-END */
  2513. &ANALYZE-RESUME
  2514. &ENDIF
  2515. &IF DEFINED(EXCLUDE-toggleData) = 0 &THEN
  2516. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE toggleData Procedure
  2517. PROCEDURE toggleData :
  2518. /*------------------------------------------------------------------------------
  2519. Purpose:
  2520. Parameters: <none>
  2521. Notes:
  2522. ------------------------------------------------------------------------------*/
  2523. DEFINE INPUT PARAMETER plEnabled AS LOGICAL NO-UNDO.
  2524. /* MESSAGE "dataviscustom.p toggleData setting DLE to " plEnabled "for " TARGET-PROCEDURE:FILE-NAME. */
  2525. {set DataLinksEnabled plEnabled}.
  2526. END PROCEDURE.
  2527. /* _UIB-CODE-BLOCK-END */
  2528. &ANALYZE-RESUME
  2529. &ENDIF
  2530. &IF DEFINED(EXCLUDE-viewObject) = 0 &THEN
  2531. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE viewObject Procedure
  2532. PROCEDURE viewObject :
  2533. /*------------------------------------------------------------------------------
  2534. Purpose: Views the current object.
  2535. Params: <none>
  2536. Notes: "Viewing" in the ADM is a logical concept which can be applied
  2537. to all objects regardless of whether they have a visualization;
  2538. that is why this procedure is found in smart.p. When an
  2539. object is "viewed" its links are typically activated; when
  2540. "hidden" they are sometimes deactivated, depending on the link
  2541. type. If an object has an actual visualization, the version of
  2542. viewObject in visual.p will view it.
  2543. ------------------------------------------------------------------------------*/
  2544. DEFINE VARIABLE cContainer AS CHARACTER NO-UNDO.
  2545. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  2546. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  2547. &SCOPED-DEFINE xp-assign
  2548. {get containerType cContainer}
  2549. {set ObjectHidden NO}
  2550. {set hideOnInit NO}. /* turn off flag as it is checked by container's notifypage */
  2551. &UNDEFINE xp-assign
  2552. IF cContainer NE "":U THEN
  2553. /* We don't need to physically view the SmartObjects in this Container -
  2554. they will reappear when it is viewed - but we need to tell them that
  2555. they are part of a viewed Container so that they can set links
  2556. and other states dependent on HIDDEN accordingly. */
  2557. DYNAMIC-FUNCTION("assignLinkProperty":U In TARGET-PROCEDURE,
  2558. "Container-Target":U, "ContainerHidden":U, "no":U).
  2559. /* For those objects which want to "activate" a link when an object is
  2560. viewed, we tell them that this object is 'active'. We also set the
  2561. ObjectActive property to hold onto the state for future inquiries. */
  2562. PUBLISH 'LinkState':U FROM TARGET-PROCEDURE ('active':U).
  2563. {get ContainerHandle hContainer}.
  2564. IF VALID-HANDLE(hContainer) THEN
  2565. &IF "{&WINDOW-SYSTEM}":U = "TTY":U &THEN
  2566. IF hContainer:TYPE EQ "WINDOW" THEN DO: /* Can't view TTY window, */
  2567. hFrame = hContainer:FIRST-CHILD.
  2568. IF VALID-HANDLE(hFrame) THEN
  2569. VIEW hFrame. /* so view the contents. */
  2570. END.
  2571. ELSE
  2572. &ENDIF
  2573. ASSIGN hContainer:HIDDEN = NO.
  2574. RETURN.
  2575. END PROCEDURE.
  2576. /* _UIB-CODE-BLOCK-END */
  2577. &ANALYZE-RESUME
  2578. &ENDIF
  2579. /* ************************ Function Implementations ***************** */
  2580. &IF DEFINED(EXCLUDE-anyMessage) = 0 &THEN
  2581. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION anyMessage Procedure
  2582. FUNCTION anyMessage RETURNS LOGICAL
  2583. ( ) :
  2584. /*------------------------------------------------------------------------------
  2585. Purpose: Returns a flag indicating whether there is any message in the log.
  2586. Params: <none>
  2587. Returns: LOGICAL: true if there are messages in the log, else false.
  2588. ------------------------------------------------------------------------------*/
  2589. RETURN gcDataMessages NE "":U.
  2590. END FUNCTION.
  2591. /* _UIB-CODE-BLOCK-END */
  2592. &ANALYZE-RESUME
  2593. &ENDIF
  2594. &IF DEFINED(EXCLUDE-applyFocus) = 0 &THEN
  2595. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION applyFocus Procedure
  2596. FUNCTION applyFocus RETURNS LOGICAL
  2597. ( pcField AS CHAR ) :
  2598. /*------------------------------------------------------------------------------
  2599. Purpose: Apply entry to a widget
  2600. pcfield - a field name
  2601. - ? first in tab order
  2602. Notes: Similar to applyEntry (which just calls this), but returns result
  2603. allowing callers to manage focus across multiple contained objects.
  2604. - container.p overrides this and passes ContainerHandle frames and
  2605. ContainerTargets as the last parameters to applyFocusToframe in
  2606. order to call applyFocus in child objects when their frame is
  2607. encountered .
  2608. ------------------------------------------------------------------------------*/
  2609. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  2610. {get ContainerHandle hFrame}.
  2611. RETURN DYNAMIC-FUNC("applyFocusToFrame":U IN TARGET-PROCEDURE,
  2612. hFrame,pcField,"","").
  2613. END FUNCTION.
  2614. /* _UIB-CODE-BLOCK-END */
  2615. &ANALYZE-RESUME
  2616. &ENDIF
  2617. &IF DEFINED(EXCLUDE-applyFocusToFrame) = 0 &THEN
  2618. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION applyFocusToFrame Procedure
  2619. FUNCTION applyFocusToFrame RETURNS LOGICAL
  2620. ( phFrame AS HANDLE,
  2621. pcField AS CHAR,
  2622. pcFrameList AS CHAR,
  2623. pcObjectList AS CHAR ) :
  2624. /*------------------------------------------------------------------------------
  2625. Purpose: Utility that applies focus ("entry") to the specified or first tab
  2626. item in the passed frame, including possible child frames and
  2627. optionally through the child objects that owns the frame.
  2628. Parameters:
  2629. phFrame - frame handle to check
  2630. pcField - field name of widget to apply entry to
  2631. - blank or ? means find first tab item.
  2632. pcFrameList - List of frame handles that belongs to SmartObjects.
  2633. pcObjectList - List of objects that corresponds to the frame list.
  2634. Notes: This is a frame level utility used by the object level applyFocus
  2635. not really intended for direct calls.
  2636. Use applyFocus or run applyEntry
  2637. ------------------------------------------------------------------------------*/
  2638. DEFINE VARIABLE hWidget AS HANDLE NO-UNDO.
  2639. DEFINE VARIABLE iObject AS INTEGER NO-UNDO.
  2640. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  2641. IF NOT VALID-HANDLE(phFrame)
  2642. OR lookup(phFrame:TYPE,'FRAME,DIALOG-BOX':U) = 0 THEN
  2643. RETURN FALSE.
  2644. if pcField = ? then
  2645. pcField = "":U.
  2646. ASSIGN
  2647. hWidget = phFrame:CURRENT-ITERATION
  2648. hWidget = hWidget:FIRST-TAB-ITEM.
  2649. DO WHILE VALID-HANDLE(hWidget):
  2650. IF hWidget:VISIBLE THEN
  2651. DO:
  2652. IF hWidget:TYPE = "frame":U THEN
  2653. DO:
  2654. iObject = lookup(string(hWidget),pcFrameList).
  2655. if iObject > 0 then
  2656. do:
  2657. hObject = WIDGET-HANDLE(ENTRY(iObject,pcObjectList)).
  2658. if {fnarg applyFocus pcField hObject} then
  2659. return TRUE.
  2660. end.
  2661. ELSE
  2662. IF DYNAMIC-FUNC("applyFocusToFrame":U IN TARGET-PROCEDURE,
  2663. hWidget,pcfield,pcFrameList,pcObjectList) THEN
  2664. RETURN TRUE.
  2665. END.
  2666. ELSE IF hWidget:SENSITIVE AND (pcField = "":U OR pcField = hWidget:NAME) THEN
  2667. DO:
  2668. APPLY "entry" TO hWidget.
  2669. RETURN TRUE.
  2670. END.
  2671. END.
  2672. hWidget = hWidget:NEXT-TAB-ITEM.
  2673. END. /* do while valid hWidget */
  2674. RETURN FALSE.
  2675. END FUNCTION.
  2676. /* _UIB-CODE-BLOCK-END */
  2677. &ANALYZE-RESUME
  2678. &ENDIF
  2679. &IF DEFINED(EXCLUDE-assignBufferValueFromReference) = 0 &THEN
  2680. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignBufferValueFromReference Procedure
  2681. FUNCTION assignBufferValueFromReference RETURNS CHARACTER
  2682. (phBufferField AS HANDLE,
  2683. pcReference AS CHAR) :
  2684. /*------------------------------------------------------------------------------
  2685. Purpose: Assigns a large buffer-column from the passed reference.
  2686. Returns the error message if it fails.
  2687. Paramters: phbufferField - buffer-field handle of large data-type
  2688. pcReference - Reference to where the value can be retrieved
  2689. - File,<filename>
  2690. - File,<function-name>,<procedure-handle>
  2691. - Data,<function-name>,<procedure-handle>
  2692. - Data,<function-name>,<procedure-handle>
  2693. - Data,<function-name>,<procedure-handle>
  2694. Notes: Could not find or open file problems are considered potential
  2695. runtime errors and are using the adm messageNumber.
  2696. Errors that are considered design time errors are either returned
  2697. from progress error-status or hardcoded.
  2698. - This is implemented in smart since it is needed by both the data
  2699. class and dataset class (and has no property dependencies)
  2700. ------------------------------------------------------------------------------*/
  2701. DEFINE VARIABLE cRefType AS CHARACTER NO-UNDO.
  2702. DEFINE VARIABLE cDataType AS CHARACTER NO-UNDO.
  2703. DEFINE VARIABLE mLargeValue AS MEMPTR NO-UNDO.
  2704. DEFINE VARIABLE clLargeValue AS LONGCHAR NO-UNDO.
  2705. DEFINE VARIABLE hLargeSource AS HANDLE NO-UNDO.
  2706. DEFINE VARIABLE cLargeFile AS CHARACTER NO-UNDO.
  2707. DEFINE VARIABLE cLargeFunction AS CHARACTER NO-UNDO.
  2708. DEFINE VARIABLE cLargeFilePathed AS CHARACTER NO-UNDO.
  2709. DEFINE VARIABLE cSignature AS CHARACTER NO-UNDO.
  2710. DEFINE VARIABLE cErrorReason AS CHARACTER NO-UNDO.
  2711. DEFINE VARIABLE lQueryContainer AS LOGICAL NO-UNDO.
  2712. DEFINE VARIABLE cObjectName AS CHARACTER NO-UNDO.
  2713. DEFINE VARIABLE cColumnName AS CHARACTER NO-UNDO.
  2714. DEFINE VARIABLE lUseParam AS LOGICAL NO-UNDO.
  2715. IF pcReference = ''
  2716. OR pcReference = '?'
  2717. OR pcReference = ?
  2718. OR pcReference = 'File,':U
  2719. OR pcReference = 'File,?':U THEN
  2720. phBufferField:BUFFER-VALUE = ?.
  2721. ELSE DO:
  2722. ASSIGN
  2723. cRefType = ENTRY(1,pcReference)
  2724. cLargeFunction = ENTRY(2,pcReference)
  2725. cColumnName = {fnarg columnName phBufferField}.
  2726. IF NUM-ENTRIES(pcReference) > 2 THEN
  2727. DO:
  2728. hLargeSource = WIDGET-HANDLE(ENTRY(3,pcReference)).
  2729. IF NOT VALID-HANDLE(hLargeSource) THEN
  2730. RETURN "The procedure handle in the large object update reference is not valid.".
  2731. END.
  2732. IF VALID-HANDLE(hLargeSource) THEN
  2733. DO:
  2734. IF CAN-DO(hLargeSource:INTERNAL-ENTRIES,cLargefunction) THEN
  2735. cSignature = hLargeSource:GET-SIGNATURE(cLargefunction).
  2736. ELSE /* adm2 super stack */
  2737. cSignature = {fnarg signature cLargefunction hLargeSource}.
  2738. IF cSignature <> '' THEN
  2739. DO:
  2740. lUseParam = ENTRY(3,cSignature) <> '':U.
  2741. IF cRefType = 'Data' THEN
  2742. cDataType = ENTRY(2,cSignature).
  2743. ELSE
  2744. cDataType = 'CHARACTER':U.
  2745. END.
  2746. END.
  2747. CASE cRefType:
  2748. WHEN 'Data':U THEN
  2749. DO:
  2750. CASE cDataType:
  2751. WHEN 'Memptr':U THEN
  2752. DO:
  2753. IF lUseParam THEN
  2754. mLargeValue = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource,
  2755. cColumnName) NO-ERROR.
  2756. ELSE
  2757. mLargeValue = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource)
  2758. NO-ERROR.
  2759. COPY-LOB FROM mLargeValue TO phBufferField:BUFFER-VALUE NO-ERROR.
  2760. IF ERROR-STATUS:ERROR THEN
  2761. RETURN ERROR-STATUS:GET-MESSAGE(1).
  2762. END.
  2763. WHEN 'Longchar':U THEN
  2764. DO:
  2765. IF lUseParam THEN
  2766. clLargeValue = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource,
  2767. cColumnName) NO-ERROR.
  2768. ELSE
  2769. clLargeValue = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource)
  2770. NO-ERROR.
  2771. IF LENGTH(clLargeValue) > 0 THEN
  2772. COPY-LOB FROM clLargeValue TO phBufferField:BUFFER-VALUE NO-ERROR.
  2773. ELSE
  2774. phBufferField:BUFFER-VALUE = ?.
  2775. IF ERROR-STATUS:ERROR THEN
  2776. RETURN ERROR-STATUS:GET-MESSAGE(1).
  2777. END.
  2778. OTHERWISE
  2779. DO:
  2780. IF lUseParam THEN
  2781. phBufferField:BUFFER-VALUE = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource,
  2782. cColumnName) NO-ERROR.
  2783. ELSE
  2784. phBufferField:BUFFER-VALUE = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource)
  2785. NO-ERROR.
  2786. IF ERROR-STATUS:ERROR THEN
  2787. RETURN ERROR-STATUS:GET-MESSAGE(1).
  2788. END.
  2789. END CASE. /* cDataType */
  2790. END. /* when 'data' */
  2791. WHEN 'File':U THEN
  2792. DO:
  2793. /* if file and function get the filename from the call back */
  2794. IF VALID-HANDLE(hLargeSource) THEN
  2795. DO:
  2796. IF lUseParam THEN
  2797. cLargeFile = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource,
  2798. cColumnName) NO-ERROR.
  2799. ELSE
  2800. cLargeFile = DYNAMIC-FUNCTION(cLargeFunction IN hLargeSource)
  2801. NO-ERROR.
  2802. IF ERROR-STATUS:ERROR THEN
  2803. RETURN ERROR-STATUS:GET-MESSAGE(1).
  2804. END.
  2805. /* if no procedure to call in the filename is passed as reference */
  2806. ELSE
  2807. cLargeFile = cLargeFunction.
  2808. IF cLargeFile <> '':U THEN
  2809. DO:
  2810. ASSIGN
  2811. FILE-INFO:FILE-NAME = cLargefile
  2812. cLargeFilePathed = FILE-INFO:FULL-PATHNAME.
  2813. IF cLargeFilePathed <> ? THEN
  2814. COPY-LOB FROM FILE cLargeFilePathed TO phBufferField:BUFFER-VALUE NO-ERROR.
  2815. /* If pathed name is unknown or progress 43 (could not find or open)
  2816. then use ADM error 92 (could not find or open.. ) as the reason
  2817. to pass to the caller */
  2818. IF (ERROR-STATUS:ERROR AND ERROR-STATUS:GET-NUMBER(1) = 43)
  2819. OR cLargeFilePathed = ? THEN
  2820. cErrorReason = SUBSTITUTE({fnarg messageNumber 92},
  2821. (IF cLargeFilePathed = ?
  2822. THEN cLargeFile
  2823. ELSE cLargeFilePathed)).
  2824. END.
  2825. ELSE
  2826. phBufferField:BUFFER-VALUE = ?.
  2827. END.
  2828. OTHERWISE
  2829. cErrorReason = "The reference type " + cRefType + " is not valid in update reference.".
  2830. END CASE.
  2831. END.
  2832. RETURN cErrorReason.
  2833. END FUNCTION.
  2834. /* _UIB-CODE-BLOCK-END */
  2835. &ANALYZE-RESUME
  2836. &ENDIF
  2837. &IF DEFINED(EXCLUDE-assignLinkProperty) = 0 &THEN
  2838. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignLinkProperty Procedure
  2839. FUNCTION assignLinkProperty RETURNS LOGICAL
  2840. ( pcLink AS CHARACTER, pcPropName AS CHARACTER, pcPropValue AS CHARACTER ) :
  2841. /*------------------------------------------------------------------------------
  2842. Purpose: Sets a property value in an object at the other end of
  2843. a specified link, relative to TARGET-PROCEDURE.
  2844. Parameters: INPUT pcLink AS CHARACTER -- Link Type,
  2845. INPUT pcPropName AS CHARACTER -- Property Name,
  2846. INPUT pcPropValue AS CHARACTER -- Property Value.
  2847. Returns: LOGICAL: true if "set" operation succeeds, else false.
  2848. Notes: ADM2 Version of set-link-attribute. Note that only one property
  2849. name and value is allowed, as opposed to the "attribute list"
  2850. format of V8. If the property function is not there or invalid
  2851. somehow, or if any of the "set"s fails, return false.
  2852. ------------------------------------------------------------------------------*/
  2853. DEFINE VARIABLE cObjects AS CHARACTER NO-UNDO.
  2854. DEFINE VARIABLE lReturn AS LOGICAL NO-UNDO INIT yes.
  2855. DEFINE VARIABLE lSuccess AS LOGICAL NO-UNDO.
  2856. DEFINE VARIABLE iObject AS INTEGER NO-UNDO.
  2857. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  2858. cObjects = DYNAMIC-FUNCTION('linkHandles':U IN TARGET-PROCEDURE, pcLink).
  2859. IF cObjects NE ? THEN
  2860. DO iObject = 1 TO NUM-ENTRIES(cObjects):
  2861. /* Get the property's native datatype so that we can set it properly. */
  2862. ASSIGN hObject = WIDGET-HANDLE(ENTRY(iObject, cObjects))
  2863. lSuccess = dynamic-function("set":U + pcPropName IN hObject, pcPropValue) NO-ERROR.
  2864. IF NOT lSuccess THEN lReturn = FALSE.
  2865. END.
  2866. RETURN lReturn.
  2867. END FUNCTION.
  2868. /* _UIB-CODE-BLOCK-END */
  2869. &ANALYZE-RESUME
  2870. &ENDIF
  2871. &IF DEFINED(EXCLUDE-assignMappedEntry) = 0 &THEN
  2872. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignMappedEntry Procedure
  2873. FUNCTION assignMappedEntry RETURNS CHARACTER
  2874. (pcEntryNames AS CHAR,
  2875. pcList AS CHAR,
  2876. pcEntryValues AS CHAR,
  2877. pcDelimiter AS CHAR,
  2878. plFirst AS LOG) :
  2879. /*------------------------------------------------------------------------------
  2880. Purpose: Assign a value to a mapped entry list. This is the analog of the
  2881. assignMappedEntry function copied from adeuib/_abfuncs.w
  2882. Returns the updated list.
  2883. Parameters: INPUT pcEntryNames - entry names to set (pcDelimiter delimited).
  2884. INPUT pcList - Delimited Name<deL>Value string to assign new values to.
  2885. INPUT pcEntryValues - New values to assign (pcDelimiter delimited).
  2886. INPUT pcDelmiter - Delimiter of 1st 3 parameters
  2887. INPUT plFirst - TRUE - Name first, value second.
  2888. FALSE - Value first, Name second.
  2889. Notes: Assigns the value to all occurances of pcEntry in the pcList
  2890. If it can't find the pcEntry, it adds the pcEntry <DEL> pcValue at the end.
  2891. ------------------------------------------------------------------------------*/
  2892. DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
  2893. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  2894. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  2895. DEFINE VARIABLE iLookUp AS INTEGER NO-UNDO.
  2896. DEFINE VARIABLE iNumEntries AS INTEGER NO-UNDO.
  2897. DEFINE VARIABLE lAssigned AS LOGICAL NO-UNDO.
  2898. /* Find out how many name/values need to be set */
  2899. iNumEntries = NUM-ENTRIES(pcEntryNames, pcDelimiter).
  2900. /* Make sure that we have the correct number of values */
  2901. IF NUM-ENTRIES(pcEntryValues, pcDelimiter) NE iNumEntries THEN DO:
  2902. RETURN ?. /* Names and values don't match, return ? */
  2903. END.
  2904. DO iEntry = 1 TO iNumEntries:
  2905. ASSIGN lAssigned = NO
  2906. cName = ENTRY(iEntry, pcEntryNames, pcDelimiter)
  2907. cValue = ENTRY(iEntry, pcEntryValues, pcDelimiter).
  2908. /* Find all occurances */
  2909. DO iLookUp = IF plFirst THEN 1 ELSE 2 TO NUM-ENTRIES(pcList, pcDelimiter) BY 2:
  2910. IF ENTRY(iLookup, pcList, pcDelimiter) = cName THEN DO:
  2911. ENTRY(iLookup + (IF plFirst THEN 1 ELSE -1), pcList, pcDelimiter) = cValue.
  2912. lAssigned = YES.
  2913. END.
  2914. END. /* Look to find all occurances */
  2915. IF NOT lAssigned THEN DO: /* Couldn't find at least one instance,
  2916. create the name value pair at the end */
  2917. pcList = pcList + (IF pcList = "":U THEN "" ELSE pcDelimiter) +
  2918. (IF plFirst THEN cName + pcDelimiter + cValue
  2919. ELSE cValue + pcDelimiter + cName).
  2920. END. /* If we can't find the pcEntry */
  2921. END. /* Loop through all name/value pairs to be assigned */
  2922. RETURN pcList.
  2923. END FUNCTION.
  2924. /* _UIB-CODE-BLOCK-END */
  2925. &ANALYZE-RESUME
  2926. &ENDIF
  2927. &IF DEFINED(EXCLUDE-assignTargetLinkState) = 0 &THEN
  2928. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignTargetLinkState Procedure
  2929. FUNCTION assignTargetLinkState RETURNS LOGICAL
  2930. ( pcLinkType as char,
  2931. plActive as logical,
  2932. plQueryObject as logical ):
  2933. /*------------------------------------------------------------------------------
  2934. Purpose: Disable links to targets.
  2935. Parameters: pcLinkType - Link type name (e.g. "Data" for data-target)
  2936. plActive - Yes - Active
  2937. - No - Inactive
  2938. plQueryObject - Yes - only targets where QueryObject = true
  2939. (Dataview, sdo, sbo)
  2940. - No - only targets where QueryObject = false
  2941. (visual)
  2942. - ? Any/all targets
  2943. Notes:
  2944. ------------------------------------------------------------------------------*/
  2945. DEFINE VARIABLE cTargets AS CHARACTER NO-UNDO.
  2946. DEFINE VARIABLE iTarget AS INTEGER NO-UNDO.
  2947. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  2948. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  2949. DEFINE VARIABLE lQuery AS LOGICAL NO-UNDO.
  2950. DEFINE VARIABLE cState AS CHARACTER NO-UNDO.
  2951. cTargets = dynamic-function("get":U + pcLinkType + "Target":U in target-procedure)
  2952. no-error.
  2953. /* design time error (don't throw error, but give a hint if used with
  2954. unsupported link) */
  2955. if error-status:error then
  2956. message error-status:get-message(1) view-as alert-box error.
  2957. if plActive then
  2958. cState = 'Active':U.
  2959. else
  2960. cState = 'Inactive':U.
  2961. do iTarget = 1 TO num-entries(cTargets):
  2962. hTarget = widget-handle(entry(iTarget,cTargets)).
  2963. if valid-handle(hTarget) then
  2964. do:
  2965. if plQueryObject <> ? then
  2966. do:
  2967. {get QueryObject lQuery hTarget}.
  2968. lOk = (lQuery = plQueryObject).
  2969. end.
  2970. else
  2971. lOk = true.
  2972. if lOk then
  2973. run linkStateHandler in hTarget(cState,
  2974. target-procedure,
  2975. pcLinkType + "Source":U).
  2976. end. /* valid target */
  2977. end. /* Do iTarget = 1 to NUM */
  2978. return true.
  2979. END FUNCTION.
  2980. /* _UIB-CODE-BLOCK-END */
  2981. &ANALYZE-RESUME
  2982. &ENDIF
  2983. &IF DEFINED(EXCLUDE-changeLinkState) = 0 &THEN
  2984. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION changeLinkState Procedure
  2985. FUNCTION changeLinkState RETURNS LOGICAL
  2986. ( pcState AS CHAR,
  2987. pcLink AS CHAR,
  2988. phObject AS HANDLE):
  2989. /*------------------------------------------------------------------------------
  2990. Purpose: Subscribe to the link events in the passed object
  2991. Parameter: pcState - 'Active' - activate links by subscribing to the
  2992. <Link>Events of the passed object
  2993. 'Inactive' - deactivate links by unsubscribing to the
  2994. <Link>Events of the passed object
  2995. pcLink - full link name to a linked object.
  2996. DataSource or Data-source (both forms supported)
  2997. ------------------------------------------------------------------------------*/
  2998. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  2999. DEFINE VARIABLE iEvent AS INTEGER NO-UNDO.
  3000. ASSIGN
  3001. pcLink = REPLACE(pcLink,'-':U,'':U)
  3002. cEvents = DYNAMIC-FUNCTION("get":U + pcLink + "Events":U IN TARGET-PROCEDURE)
  3003. NO-ERROR.
  3004. IF ERROR-STATUS:ERROR = FALSE AND VALID-HANDLE(phObject) THEN
  3005. DO:
  3006. DO iEvent = 1 TO NUM-ENTRIES(cEvents):
  3007. IF pcState = 'ACTIVE':U THEN
  3008. SUBSCRIBE PROCEDURE TARGET-PROCEDURE TO ENTRY(iEvent, cEvents) IN phObject.
  3009. IF pcState = 'INACTIVE':U THEN
  3010. UNSUBSCRIBE PROCEDURE TARGET-PROCEDURE TO ENTRY(iEvent, cEvents) IN phObject.
  3011. END.
  3012. RETURN TRUE.
  3013. END.
  3014. ELSE
  3015. RETURN FALSE.
  3016. END FUNCTION.
  3017. /* _UIB-CODE-BLOCK-END */
  3018. &ANALYZE-RESUME
  3019. &ENDIF
  3020. &IF DEFINED(EXCLUDE-clearCombo) = 0 &THEN
  3021. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION clearCombo Procedure
  3022. FUNCTION clearCombo RETURNS LOGICAL
  3023. ( phField AS HANDLE ):
  3024. /*-----------------------------------------------------------------------------
  3025. Purpose: General purpose utility to clear a combo-box.
  3026. This is primarily implemented to avoid performance overhead with
  3027. the old list-item[-pairs] = list-item[-pairs] trick on large lists.
  3028. Notes:
  3029. ------------------------------------------------------------------------------*/
  3030. DEFINE VARIABLE lHasBlank AS LOGICAL NO-UNDO.
  3031. DEFINE VARIABLE lBlankAdded AS LOGICAL NO-UNDO.
  3032. IF phField:SUBTYPE = 'drop-down-list':U THEN
  3033. DO:
  3034. IF CAN-QUERY(phField,'LIST-ITEMS':U) THEN
  3035. DO:
  3036. /* Other data-types than char may be blank ('zzz').
  3037. NO-ERROR is used to prevent errors for logical combos. */
  3038. lHasBlank = phField:LOOKUP(' ') > 0 NO-ERROR.
  3039. IF phField:DATA-TYPE = 'CHARACTER':U THEN
  3040. lBlankAdded = phField:ADD-FIRST('').
  3041. IF lHasBlank OR lBlankAdded THEN
  3042. phField:SCREEN-VALUE = ' '.
  3043. ELSE
  3044. phField:LIST-ITEMS = phField:LIST-ITEMS.
  3045. END.
  3046. ELSE DO: /* list-item-pairs */
  3047. /* Add a blank entry first, take advantage of the fact that first entry
  3048. will be found when screen-value is set even if other entries have same
  3049. value */
  3050. CASE phField:DATA-TYPE:
  3051. WHEN 'CHARACTER':U THEN
  3052. lBlankAdded = phField:ADD-FIRST('','').
  3053. WHEN 'DECIMAL':U THEN
  3054. lBlankAdded = phField:ADD-FIRST('',0.0).
  3055. WHEN 'INTEGER':U THEN
  3056. lBlankAdded = phField:ADD-FIRST('',0).
  3057. WHEN 'DATE':U THEN
  3058. lBlankAdded = phField:ADD-FIRST('',TODAY).
  3059. /*otherwise... (datetime/-tz is not supported,
  3060. logicals typically will have very few entries, so not worth while)*/
  3061. END.
  3062. IF lBlankAdded THEN
  3063. phField:SCREEN-VALUE = IF phField:ENTRY(1) = '' THEN ' '
  3064. ELSE phField:ENTRY(1).
  3065. ELSE
  3066. phField:LIST-ITEM-PAIRS = phField:LIST-ITEM-PAIRS.
  3067. END.
  3068. IF lBlankAdded THEN
  3069. phField:DELETE(1).
  3070. END.
  3071. ELSE /* simple and drop-down combos */
  3072. phField:SCREEN-VALUE = ''.
  3073. RETURN TRUE.
  3074. END.
  3075. /* _UIB-CODE-BLOCK-END */
  3076. &ANALYZE-RESUME
  3077. &ENDIF
  3078. &IF DEFINED(EXCLUDE-deleteEntry) = 0 &THEN
  3079. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION deleteEntry Procedure
  3080. FUNCTION deleteEntry RETURNS CHARACTER
  3081. ( piEntry AS INTEGER,
  3082. pcString AS CHARACTER,
  3083. pcDelim AS CHARACTER ) :
  3084. /*------------------------------------------------------------------------------
  3085. Purpose: Delete entry piEntry from pcString.
  3086. Returns: Returns the new string without the specified entry.
  3087. ------------------------------------------------------------------------------*/
  3088. DEFINE VARIABLE iNumEnt AS INT NO-UNDO.
  3089. DEFINE VARIABLE cUnique AS CHAR NO-UNDO INIT "@":U.
  3090. /* if delimiter is not specified then use comma as default */
  3091. IF pcDelim = "":U OR pcDelim = ? THEN pcDelim = ",":U.
  3092. /* determine a unique string to replace the entry we want to delete then
  3093. * we can easily delete it and the appropriate delimiters from pcString.
  3094. * First, if the character used to build the unique string is the delimiter
  3095. * then use another character altogether to build the unique string.
  3096. */
  3097. IF pcDelim = cUnique THEN cUnique = "$":U. /* use alternative char*/
  3098. DO WHILE INDEX(pcString,cUnique) > 0:
  3099. cUnique = cUnique + SUBSTR(cUnique,1,1). /* build unique string*/
  3100. end.
  3101. /* replace the entry-to-delete with unique string */
  3102. /* then delete it and appropriate delimiters */
  3103. ENTRY(piEntry,pcString,pcDelim) = cUnique.
  3104. iNumEnt = NUM-ENTRIES(pcString,pcDelim).
  3105. IF iNumEnt = 1 AND piEntry = 1 THEN pcString = "":U. /* only entry*/
  3106. ELSE
  3107. pcstring = REPLACE(pcString,
  3108. IF piEntry = iNumEnt THEN pcDelim + cUnique /* last entry*/
  3109. ELSE IF piEntry = 1 THEN cUnique + pcDelim /* first entry*/
  3110. ELSE cUnique + pcDelim, /* middle entry*/
  3111. "":U).
  3112. RETURN pcString. /* Function return value. */
  3113. END FUNCTION.
  3114. /* _UIB-CODE-BLOCK-END */
  3115. &ANALYZE-RESUME
  3116. &ENDIF
  3117. &IF DEFINED(EXCLUDE-deleteProperties) = 0 &THEN
  3118. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION deleteProperties Procedure
  3119. FUNCTION deleteProperties RETURNS LOGICAL ( ) :
  3120. /*------------------------------------------------------------------------------
  3121. Purpose: Delete the property tt record
  3122. Notes:
  3123. ------------------------------------------------------------------------------*/
  3124. DEFINE VARIABLE hPropTable AS HANDLE NO-UNDO.
  3125. hPropTable = WIDGET-HANDLE(ENTRY(1,TARGET-PROCEDURE:ADM-DATA,CHR(1))).
  3126. IF VALID-HANDLE(hPropTable) AND hPropTable:NAME <> 'ADMProps':U THEN
  3127. DO:
  3128. hPropTable:FIND-FIRST('WHERE Target = WIDGET-HANDLE(':U + QUOTER(TARGET-PROCEDURE) + ') ':U).
  3129. hPropTable:BUFFER-DELETE().
  3130. END.
  3131. RETURN TRUE.
  3132. END FUNCTION.
  3133. /* _UIB-CODE-BLOCK-END */
  3134. &ANALYZE-RESUME
  3135. &ENDIF
  3136. &IF DEFINED(EXCLUDE-fetchMessages) = 0 &THEN
  3137. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION fetchMessages Procedure
  3138. FUNCTION fetchMessages RETURNS CHARACTER
  3139. ( ) :
  3140. /*------------------------------------------------------------------------------
  3141. Purpose: Returns a delimited list of all messages in their "raw" form.
  3142. The message log is cleared.
  3143. Params: <none>
  3144. Returns: CHARACTER: specially-delimited message text string
  3145. Notes: The message list is delimited by CHR(3); within each message, the
  3146. Message Text, the Field (if any), and the Table (if any) are delimited
  3147. by CHR(4). Use the similar function reviewMessages to read messages
  3148. without deleting them.
  3149. ------------------------------------------------------------------------------*/
  3150. DEFINE VARIABLE cMessages AS CHARACTER NO-UNDO INIT "":U.
  3151. cMessages = gcDataMessages.
  3152. gcDataMessages = "":U.
  3153. glManageReadErrors = false.
  3154. RETURN cMessages.
  3155. END FUNCTION.
  3156. /* _UIB-CODE-BLOCK-END */
  3157. &ANALYZE-RESUME
  3158. &ENDIF
  3159. &IF DEFINED(EXCLUDE-getChildDataKey) = 0 &THEN
  3160. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getChildDataKey Procedure
  3161. FUNCTION getChildDataKey RETURNS CHARACTER
  3162. ( /* parameter-definitions */ ) :
  3163. /*------------------------------------------------------------------------------
  3164. Purpose:
  3165. Notes:
  3166. ------------------------------------------------------------------------------*/
  3167. DEFINE VARIABLE cChildDataKey AS CHARACTER NO-UNDO.
  3168. {get ChildDataKey cChildDataKey}.
  3169. RETURN cChildDataKey.
  3170. END FUNCTION.
  3171. /* _UIB-CODE-BLOCK-END */
  3172. &ANALYZE-RESUME
  3173. &ENDIF
  3174. &IF DEFINED(EXCLUDE-getClassName) = 0 &THEN
  3175. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getClassName Procedure
  3176. FUNCTION getClassName RETURNS CHARACTER
  3177. ( ):
  3178. /*------------------------------------------------------------------------------
  3179. Purpose: Returns the Repository class name
  3180. Notes:
  3181. ------------------------------------------------------------------------------*/
  3182. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  3183. &SCOPED-DEFINE xpClassName
  3184. {get ClassName cClassName}.
  3185. &UNDEFINE xpClassName
  3186. RETURN cClassName.
  3187. END FUNCTION. /* getClassName */
  3188. /* _UIB-CODE-BLOCK-END */
  3189. &ANALYZE-RESUME
  3190. &ENDIF
  3191. &IF DEFINED(EXCLUDE-getContainerHandle) = 0 &THEN
  3192. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerHandle Procedure
  3193. FUNCTION getContainerHandle RETURNS HANDLE
  3194. ( ) :
  3195. /*------------------------------------------------------------------------------
  3196. Purpose: Returns the widget handle of this object's Window or
  3197. Frame container.
  3198. Returns: HANDLE
  3199. Params: <none>
  3200. ------------------------------------------------------------------------------*/
  3201. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  3202. {get ContainerHandle hContainer}.
  3203. RETURN hContainer.
  3204. END FUNCTION.
  3205. /* _UIB-CODE-BLOCK-END */
  3206. &ANALYZE-RESUME
  3207. &ENDIF
  3208. &IF DEFINED(EXCLUDE-getContainerHidden) = 0 &THEN
  3209. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerHidden Procedure
  3210. FUNCTION getContainerHidden RETURNS LOGICAL
  3211. ( ) :
  3212. /*------------------------------------------------------------------------------
  3213. Purpose: Returns a flag indicating whether this object's *parent* container
  3214. is hidden.
  3215. Returns: LOGICAL
  3216. Params: <none>
  3217. ------------------------------------------------------------------------------*/
  3218. DEFINE VARIABLE lHidden AS LOGICAL NO-UNDO.
  3219. {get ContainerHidden lHidden}.
  3220. RETURN lHidden.
  3221. END FUNCTION.
  3222. /* _UIB-CODE-BLOCK-END */
  3223. &ANALYZE-RESUME
  3224. &ENDIF
  3225. &IF DEFINED(EXCLUDE-getContainerSource) = 0 &THEN
  3226. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerSource Procedure
  3227. FUNCTION getContainerSource RETURNS HANDLE
  3228. ( ) :
  3229. /*------------------------------------------------------------------------------
  3230. Purpose: Returns the handle of this object's ContainerSource, if any.
  3231. Params: <none>
  3232. Returns: HANDLE
  3233. ------------------------------------------------------------------------------*/
  3234. DEFINE VARIABLE hSource AS HANDLE NO-UNDO.
  3235. {get ContainerSource hSource}.
  3236. RETURN hSource.
  3237. END FUNCTION.
  3238. /* _UIB-CODE-BLOCK-END */
  3239. &ANALYZE-RESUME
  3240. &ENDIF
  3241. &IF DEFINED(EXCLUDE-getContainerSourceEvents) = 0 &THEN
  3242. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerSourceEvents Procedure
  3243. FUNCTION getContainerSourceEvents RETURNS CHARACTER
  3244. ( ) :
  3245. /*------------------------------------------------------------------------------
  3246. Purpose: Returns a comma-separated list of the events this object
  3247. wants to subscribe to in its ContainerSource
  3248. Params: <none>
  3249. Returns: CHARACTER
  3250. ------------------------------------------------------------------------------*/
  3251. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  3252. {get ContainerSourceEvents cEvents}.
  3253. RETURN cEvents.
  3254. END FUNCTION.
  3255. /* _UIB-CODE-BLOCK-END */
  3256. &ANALYZE-RESUME
  3257. &ENDIF
  3258. &IF DEFINED(EXCLUDE-getContainerType) = 0 &THEN
  3259. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerType Procedure
  3260. FUNCTION getContainerType RETURNS CHARACTER
  3261. ( ) :
  3262. /*------------------------------------------------------------------------------
  3263. Purpose: Returns the Type of Container which this SmartObject is --
  3264. blank if the object is not a container, otherwise "WINDOW" for
  3265. a SmartWindow , "FRAME" for a SmartFrame.
  3266. Params: <none>
  3267. Returns: CHARACTER
  3268. ------------------------------------------------------------------------------*/
  3269. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  3270. {get ContainerType cType}.
  3271. RETURN cType.
  3272. END FUNCTION.
  3273. /* _UIB-CODE-BLOCK-END */
  3274. &ANALYZE-RESUME
  3275. &ENDIF
  3276. &IF DEFINED(EXCLUDE-getDataLinksEnabled) = 0 &THEN
  3277. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataLinksEnabled Procedure
  3278. FUNCTION getDataLinksEnabled RETURNS LOGICAL
  3279. ( ) :
  3280. /*------------------------------------------------------------------------------
  3281. Purpose:
  3282. Notes: DEPRECATED
  3283. ------------------------------------------------------------------------------*/
  3284. DEFINE VARIABLE lDataLinksEnabled AS LOGICAL NO-UNDO.
  3285. {get DataLinksEnabled lDataLinksEnabled}.
  3286. RETURN lDataLinksEnabled.
  3287. END FUNCTION.
  3288. /* _UIB-CODE-BLOCK-END */
  3289. &ANALYZE-RESUME
  3290. &ENDIF
  3291. &IF DEFINED(EXCLUDE-getDataSource) = 0 &THEN
  3292. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataSource Procedure
  3293. FUNCTION getDataSource RETURNS HANDLE
  3294. ( ) :
  3295. /*------------------------------------------------------------------------------
  3296. Purpose: Returns the object's data source, if any.
  3297. Params: <none>
  3298. Returns: HANDLE
  3299. Notes: There si no xp preprosessor in order to allow design-time override
  3300. ------------------------------------------------------------------------------*/
  3301. DEFINE VARIABLE hDataSource AS HANDLE NO-UNDO.
  3302. &SCOPED-DEFINE xpDataSource
  3303. {get DataSource hDataSource}.
  3304. &UNDEFINE xpDataSource
  3305. RETURN hDataSource.
  3306. END FUNCTION.
  3307. /* _UIB-CODE-BLOCK-END */
  3308. &ANALYZE-RESUME
  3309. &ENDIF
  3310. &IF DEFINED(EXCLUDE-getDataSourceEvents) = 0 &THEN
  3311. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataSourceEvents Procedure
  3312. FUNCTION getDataSourceEvents RETURNS CHARACTER
  3313. ( ) :
  3314. /*------------------------------------------------------------------------------
  3315. Purpose: Returns a comma-separated list of the events this object
  3316. wants to subscribe to in its DataSource.
  3317. Params: <none>
  3318. Returns: CHARACTER
  3319. ------------------------------------------------------------------------------*/
  3320. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  3321. {get DataSourceEvents cEvents}.
  3322. RETURN cEvents.
  3323. END FUNCTION.
  3324. /* _UIB-CODE-BLOCK-END */
  3325. &ANALYZE-RESUME
  3326. &ENDIF
  3327. &IF DEFINED(EXCLUDE-getDataSourceNames) = 0 &THEN
  3328. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataSourceNames Procedure
  3329. FUNCTION getDataSourceNames RETURNS CHARACTER
  3330. ( ) :
  3331. /*------------------------------------------------------------------------------
  3332. Purpose: Returns the ObjectName of the Data Object that sends data to this
  3333. visual object. This would be set if the data-Source is an SBO
  3334. or other Container with DataObjects.
  3335. Params: <none>
  3336. Notes: Used by both visual objects and SDOs.
  3337. See the SBOs addDataTarget for more details on how this is set.
  3338. ------------------------------------------------------------------------------*/
  3339. DEFINE VARIABLE cSourceNames AS CHAR NO-UNDO.
  3340. {get DataSourceNames cSourceNames}.
  3341. RETURN cSourceNames.
  3342. END FUNCTION.
  3343. /* _UIB-CODE-BLOCK-END */
  3344. &ANALYZE-RESUME
  3345. &ENDIF
  3346. &IF DEFINED(EXCLUDE-getDataTarget) = 0 &THEN
  3347. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataTarget Procedure
  3348. FUNCTION getDataTarget RETURNS CHARACTER
  3349. ( ) :
  3350. /*------------------------------------------------------------------------------
  3351. Purpose: Returns the Data Target (in CHARACTER form, because it may be
  3352. a comma-separated list).
  3353. Params: <none>
  3354. ------------------------------------------------------------------------------*/
  3355. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  3356. {get DataTarget cTarget}.
  3357. RETURN cTarget.
  3358. END FUNCTION.
  3359. /* _UIB-CODE-BLOCK-END */
  3360. &ANALYZE-RESUME
  3361. &ENDIF
  3362. &IF DEFINED(EXCLUDE-getDataTargetEvents) = 0 &THEN
  3363. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDataTargetEvents Procedure
  3364. FUNCTION getDataTargetEvents RETURNS CHARACTER
  3365. ( ) :
  3366. /*------------------------------------------------------------------------------
  3367. Purpose: Returns the list of events this object subscribes to in its
  3368. DataTarget.
  3369. Parameters:
  3370. Notes:
  3371. ------------------------------------------------------------------------------*/
  3372. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  3373. {get DataTargetEvents cEvents}.
  3374. RETURN cEvents.
  3375. END FUNCTION.
  3376. /* _UIB-CODE-BLOCK-END */
  3377. &ANALYZE-RESUME
  3378. &ENDIF
  3379. &IF DEFINED(EXCLUDE-getDBAware) = 0 &THEN
  3380. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDBAware Procedure
  3381. FUNCTION getDBAware RETURNS LOGICAL
  3382. ( ) :
  3383. /*------------------------------------------------------------------------------
  3384. Purpose: Returns a flag indicating whether this object is dependent
  3385. on being connected to a database or not, to allow some code
  3386. to execute two different ways (for DataObjects, e.g.).
  3387. Params: <none>
  3388. Returns: LOGICAL
  3389. ------------------------------------------------------------------------------*/
  3390. DEFINE VARIABLE lAware AS LOGICAL NO-UNDO.
  3391. {get DBAware lAware}.
  3392. RETURN lAware.
  3393. END FUNCTION.
  3394. /* _UIB-CODE-BLOCK-END */
  3395. &ANALYZE-RESUME
  3396. &ENDIF
  3397. &IF DEFINED(EXCLUDE-getDesignDataObject) = 0 &THEN
  3398. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDesignDataObject Procedure
  3399. FUNCTION getDesignDataObject RETURNS CHARACTER
  3400. ( ) :
  3401. /*------------------------------------------------------------------------------
  3402. Purpose: Returns the design time SDO for objects that needs SDO data,
  3403. but cannot be linked.
  3404. Notes:
  3405. ------------------------------------------------------------------------------*/
  3406. DEFINE VARIABLE cDataObject AS CHAR NO-UNDO.
  3407. {get DesignDataObject cDataObject}.
  3408. RETURN cDataObject.
  3409. END FUNCTION.
  3410. /* _UIB-CODE-BLOCK-END */
  3411. &ANALYZE-RESUME
  3412. &ENDIF
  3413. &IF DEFINED(EXCLUDE-getDynamicObject) = 0 &THEN
  3414. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDynamicObject Procedure
  3415. FUNCTION getDynamicObject RETURNS LOGICAL
  3416. ( /* parameter-definitions */ ) :
  3417. /*------------------------------------------------------------------------------
  3418. Purpose:
  3419. Notes:
  3420. ------------------------------------------------------------------------------*/
  3421. DEFINE VARIABLE lTemp AS LOGICAL NO-UNDO.
  3422. {get DynamicObject lTemp}.
  3423. RETURN lTemp. /* Function return value. */
  3424. END FUNCTION.
  3425. /* _UIB-CODE-BLOCK-END */
  3426. &ANALYZE-RESUME
  3427. &ENDIF
  3428. &IF DEFINED(EXCLUDE-getHideOnInit) = 0 &THEN
  3429. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getHideOnInit Procedure
  3430. FUNCTION getHideOnInit RETURNS LOGICAL
  3431. ( ) :
  3432. /*------------------------------------------------------------------------------
  3433. Purpose: Return the logical flag that indicates whether to visualize
  3434. at initialization.
  3435. Notes: Also used for non visual object in order to publish LinkState
  3436. correctly for activation and deactivation of links.
  3437. - PendingPage is used as "visiblePage" in this logic to ensure that
  3438. this returns true for object's that are on a hidden page so they
  3439. remain hidden during initilization without depending on a
  3440. setHideOnInit that messes with customers use of HideOnInit.
  3441. - containr.p initPages sets PendingPage to the current visible page
  3442. when initializing hidden objects. Old behavior dictates that
  3443. CurrentPage must be the initted page also when hidden.
  3444. ------------------------------------------------------------------------------*/
  3445. DEFINE VARIABLE lHideOnInit AS LOGICAL NO-UNDO.
  3446. define variable hContainerSource as handle no-undo.
  3447. define variable iPendingPage as integer no-undo.
  3448. define variable iObjectPage as integer no-undo.
  3449. define variable lQueryObject as logical no-undo.
  3450. &scop xpHideOnInit
  3451. &scop xp-assign
  3452. {get HideOnInit lHideOnInit}
  3453. {get QueryObject lQueryObject}
  3454. {get ObjectPage iObjectPage}
  3455. {get ContainerSource hContainerSource}
  3456. .
  3457. &undefine xp-assign
  3458. &undefine xpHideOnInit
  3459. /* if we're on a page that can be hidden and we're not a Query
  3460. (data-source) and not already defined to be hidden then check
  3461. PendingPage */
  3462. if iObjectPage <> 0
  3463. and not lQueryObject
  3464. and not lHideOnInit
  3465. and valid-handle(hContainerSource) then
  3466. do:
  3467. {get PendingPage iPendingPage hContainerSource}.
  3468. /* if pendingpage is set and not current then keep the object hidden */
  3469. if iPendingPage <> ? and iObjectPage <> iPendingPage then
  3470. lHideOnInit = true.
  3471. end.
  3472. return lHideOnInit.
  3473. END FUNCTION.
  3474. /* _UIB-CODE-BLOCK-END */
  3475. &ANALYZE-RESUME
  3476. &ENDIF
  3477. &IF DEFINED(EXCLUDE-getInactiveLinks) = 0 &THEN
  3478. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getInactiveLinks Procedure
  3479. FUNCTION getInactiveLinks RETURNS CHARACTER
  3480. ( /* parameter-definitions */ ) :
  3481. /*------------------------------------------------------------------------------
  3482. Purpose: Stores inactive links
  3483. Notes: Stored as a comma-separated paired list where the second entry of
  3484. each pair is a semi-colon separated list of object handles
  3485. - modifyInactiveLinks should be used to maintain thje property.
  3486. - isLinklnactive should be used to check if an actual link is
  3487. inactive
  3488. ------------------------------------------------------------------------------*/
  3489. DEFINE VARIABLE cInactiveLinks AS CHARACTER NO-UNDO.
  3490. {get InactiveLinks cInactiveLinks}.
  3491. RETURN cInactiveLinks.
  3492. END FUNCTION.
  3493. /* _UIB-CODE-BLOCK-END */
  3494. &ANALYZE-RESUME
  3495. &ENDIF
  3496. &IF DEFINED(EXCLUDE-getInstanceId) = 0 &THEN
  3497. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getInstanceId Procedure
  3498. FUNCTION getInstanceId RETURNS DECIMAL
  3499. ( /* parameter-definitions */ ) :
  3500. /*------------------------------------------------------------------------------
  3501. Purpose: Returns the Repository manager's unique identifier of this instance
  3502. Notes:
  3503. ------------------------------------------------------------------------------*/
  3504. DEFINE VARIABLE dId AS DECIMAL NO-UNDO.
  3505. {get InstanceId dId}.
  3506. RETURN dId.
  3507. END FUNCTION.
  3508. /* _UIB-CODE-BLOCK-END */
  3509. &ANALYZE-RESUME
  3510. &ENDIF
  3511. &IF DEFINED(EXCLUDE-getInstanceProperties) = 0 &THEN
  3512. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getInstanceProperties Procedure
  3513. FUNCTION getInstanceProperties RETURNS CHARACTER
  3514. ( ) :
  3515. /*------------------------------------------------------------------------------
  3516. Purpose: Returns the ADM Instance Properties of the SmartObject --
  3517. a list of those properties which can be set at design time to
  3518. be initialized as part of SmO startup.
  3519. Params: <none>
  3520. Returns: CHARACTER
  3521. ------------------------------------------------------------------------------*/
  3522. DEFINE VARIABLE cProps AS CHARACTER NO-UNDO.
  3523. {get InstanceProperties cProps} NO-ERROR.
  3524. RETURN cProps.
  3525. END FUNCTION.
  3526. /* _UIB-CODE-BLOCK-END */
  3527. &ANALYZE-RESUME
  3528. &ENDIF
  3529. &IF DEFINED(EXCLUDE-getIsCrystalInstalled) = 0 &THEN
  3530. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getIsCrystalInstalled Procedure
  3531. FUNCTION getIsCrystalInstalled RETURNS LOGICAL
  3532. ( /* parameter-definitions */ ) :
  3533. /*------------------------------------------------------------------------------
  3534. Purpose: Check if Crystal is installed
  3535. Notes: This is defined as a class property to ensure the check only
  3536. is done once per session.
  3537. datavis getPrintPreviewActive calls this.
  3538. ------------------------------------------------------------------------------*/
  3539. DEFINE VARIABLE hApplication AS COM-HANDLE NO-UNDO.
  3540. DEFINE VARIABLE cRegReportDesign AS CHARACTER NO-UNDO.
  3541. DEFINE VARIABLE cKeyReportDesign AS CHARACTER NO-UNDO.
  3542. /* not checked yet */
  3543. IF glIsCrystalInstalled = ? THEN
  3544. DO:
  3545. /* Get the values for Crystal Reports from the Registry */
  3546. ASSIGN
  3547. cKeyReportDesign = "CrystalRuntime.Application"
  3548. cRegReportDesign = "CrystalRuntime.Application.7" /* Default Value */
  3549. .
  3550. /* cRegReportDesign */
  3551. LOAD cKeyReportDesign BASE-KEY "HKEY_CLASSES_ROOT":U NO-ERROR.
  3552. IF NOT ERROR-STATUS:ERROR THEN
  3553. DO:
  3554. USE cKeyReportDesign.
  3555. GET-KEY-VALUE SECTION "CurVer":U KEY DEFAULT VALUE cRegReportDesign.
  3556. END.
  3557. UNLOAD cKeyReportDesign NO-ERROR.
  3558. CREATE VALUE(cRegReportDesign) hApplication NO-ERROR.
  3559. ASSIGN glIsCrystalInstalled = NOT ERROR-STATUS:ERROR.
  3560. RELEASE OBJECT hApplication NO-ERROR.
  3561. ASSIGN hApplication = ?.
  3562. ERROR-STATUS:ERROR = NO.
  3563. END.
  3564. RETURN glIsCrystalInstalled.
  3565. END FUNCTION.
  3566. /* _UIB-CODE-BLOCK-END */
  3567. &ANALYZE-RESUME
  3568. &ENDIF
  3569. &IF DEFINED(EXCLUDE-getLabel) = 0 &THEN
  3570. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLabel Procedure
  3571. FUNCTION getLabel RETURNS CHARACTER
  3572. ( ) :
  3573. /*------------------------------------------------------------------------------
  3574. Purpose: Returns the LABEL defined for the selection
  3575. Notes: - "?" specifies that the logicalObjectName is to be used
  3576. - Blank specifies NO-LABEL
  3577. ------------------------------------------------------------------------------*/
  3578. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  3579. &SCOPED-DEFINE xpLabel
  3580. {get Label cLabel}.
  3581. &UNDEFINE xpLabel
  3582. IF cLabel = ? THEN
  3583. DO:
  3584. {get ObjectName cLabel}.
  3585. IF cLabel = '' OR cLabel = ? THEN
  3586. {get LogicalObjectName cLabel}.
  3587. /* store default for future requests */
  3588. IF cLabel <> '' AND cLabel <> ? THEN
  3589. {set Label cLabel}.
  3590. END.
  3591. RETURN cLabel.
  3592. END FUNCTION.
  3593. /* _UIB-CODE-BLOCK-END */
  3594. &ANALYZE-RESUME
  3595. &ENDIF
  3596. &IF DEFINED(EXCLUDE-getLayoutPosition) = 0 &THEN
  3597. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLayoutPosition Procedure
  3598. FUNCTION getLayoutPosition RETURNS CHARACTER
  3599. ( ):
  3600. /*------------------------------------------------------------------------------
  3601. Purpose:
  3602. Notes:
  3603. ------------------------------------------------------------------------------*/
  3604. DEFINE VARiABLE cLayoutPosition AS CHARACTER NO-UNDO.
  3605. {get LayoutPosition cLayoutPosition}.
  3606. RETURN cLayoutPosition.
  3607. END FUNCTION. /* get LayoutPosition */
  3608. /* _UIB-CODE-BLOCK-END */
  3609. &ANALYZE-RESUME
  3610. &ENDIF
  3611. &IF DEFINED(EXCLUDE-getLogicalObjectName) = 0 &THEN
  3612. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLogicalObjectName Procedure
  3613. FUNCTION getLogicalObjectName RETURNS CHARACTER
  3614. ( /* parameter-definitions */ ) :
  3615. /*------------------------------------------------------------------------------
  3616. Purpose: Return the logical object (Repository object name)
  3617. Notes: This is the unique name of the object master in the repository
  3618. ------------------------------------------------------------------------------*/
  3619. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  3620. {get LogicalObjectName cLogicalObject}.
  3621. RETURN cLogicalObject.
  3622. END FUNCTION.
  3623. /* _UIB-CODE-BLOCK-END */
  3624. &ANALYZE-RESUME
  3625. &ENDIF
  3626. &IF DEFINED(EXCLUDE-getLogicalVersion) = 0 &THEN
  3627. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLogicalVersion Procedure
  3628. FUNCTION getLogicalVersion RETURNS CHARACTER
  3629. ( /* parameter-definitions */ ) :
  3630. /*------------------------------------------------------------------------------
  3631. Purpose:
  3632. Notes:
  3633. ------------------------------------------------------------------------------*/
  3634. DEFINE VARIABLE cVersion AS CHARACTER NO-UNDO.
  3635. &SCOPED-DEFINE xpLogicalVersion
  3636. {get LogicalVersion cVersion}.
  3637. &UNDEFINE xpLogicalVersion
  3638. RETURN cVersion. /* Function return value. */
  3639. END FUNCTION.
  3640. /* _UIB-CODE-BLOCK-END */
  3641. &ANALYZE-RESUME
  3642. &ENDIF
  3643. &IF DEFINED(EXCLUDE-getManageReadErrors) = 0 &THEN
  3644. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getManageReadErrors Procedure
  3645. FUNCTION getManageReadErrors RETURNS LOGICAL
  3646. ( ) :
  3647. /*------------------------------------------------------------------------------
  3648. Purpose: Session property that tells if adm error mechanism is used on data
  3649. retrieval.
  3650. Notes: This should only be set to true if one is absolutley sure that the
  3651. messages are emptied from the message queue when the request is
  3652. completed.
  3653. (which is stored in a variable in smart)
  3654. - Used on server by some adm2 data request procedures - fetch*
  3655. - Set to false in fetchMessages
  3656. ------------------------------------------------------------------------------*/
  3657. RETURN glManageReadErrors.
  3658. END FUNCTION.
  3659. /* _UIB-CODE-BLOCK-END */
  3660. &ANALYZE-RESUME
  3661. &ENDIF
  3662. &IF DEFINED(EXCLUDE-getManagerHandle) = 0 &THEN
  3663. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getManagerHandle Procedure
  3664. FUNCTION getManagerHandle RETURNS HANDLE
  3665. ( pcManager AS CHAR ) :
  3666. /*------------------------------------------------------------------------------
  3667. Purpose:
  3668. Notes: Override to assign default "managers" for dynamics and adm2
  3669. If a manager is found in the session it overrides the default.
  3670. ------------------------------------------------------------------------------*/
  3671. DEFINE VARIABLE hManager AS HANDLE NO-UNDO.
  3672. DEFINE VARIABLE cDefault AS CHARACTER NO-UNDO.
  3673. hManager = SUPER(pcManager) NO-ERROR.
  3674. IF NOT VALID-HANDLE(hManager) THEN
  3675. DO:
  3676. CASE pcManager:
  3677. WHEN 'DataContainer' THEN
  3678. ASSIGN cDefault = 'adm2/datacontainer.p':U.
  3679. WHEN 'SDFCacheManager':U THEN
  3680. ASSIGN cDefault = 'adm2/lookupfield.p':U.
  3681. WHEN 'CacheManager':U THEN
  3682. ASSIGN cDefault = 'adm2/data.p':U.
  3683. WHEN 'ToolbarManager':U THEN
  3684. ASSIGN cDefault = 'adm2/toolbar.p':U.
  3685. WHEN 'ServiceAdapter':U THEN
  3686. ASSIGN cDefault = {fn getServiceAdapterName}.
  3687. END.
  3688. IF cDefault > '' THEN
  3689. DO:
  3690. hManager = SESSION:FIRST-PROCEDURE.
  3691. DO WHILE VALID-HANDLE(hManager):
  3692. IF REPLACE(hManager:FILE-NAME,'~\':U,'/':U)
  3693. = RIGHT-TRIM(REPLACE(cDefault + ' ','.r ','.p ')) THEN
  3694. RETURN hManager.
  3695. hManager = hManager:NEXT-SIBLING.
  3696. END.
  3697. DO ON STOP UNDO,LEAVE:
  3698. RUN VALUE(cDefault) PERSISTENT SET hManager.
  3699. END.
  3700. END.
  3701. END.
  3702. RETURN hManager.
  3703. END FUNCTION.
  3704. /* _UIB-CODE-BLOCK-END */
  3705. &ANALYZE-RESUME
  3706. &ENDIF
  3707. &IF DEFINED(EXCLUDE-getMessageBoxType) = 0 &THEN
  3708. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMessageBoxType Procedure
  3709. FUNCTION getMessageBoxType RETURNS CHARACTER
  3710. ( /* parameter-definitions */ ) :
  3711. /*------------------------------------------------------------------------------
  3712. Purpose: Returns the type of message
  3713. Notes:
  3714. ------------------------------------------------------------------------------*/
  3715. define variable rRowid as rowid no-undo.
  3716. define variable lProfileExists as logical no-undo.
  3717. if gcMessageBoxType eq ? and valid-handle(gshSessionManager) then
  3718. do:
  3719. /* check user prefs first. */
  3720. run checkProfileDataExists in gshProfileManager ('General',
  3721. 'Preference',
  3722. 'MessageBoxType',
  3723. No, /*plCheckPermanentOnly*/
  3724. No, /*plCheckCacheOnly*/
  3725. output lProfileExists ) no-error.
  3726. if lProfileExists then
  3727. run getProfileData in gshProfileManager ('General':u, /* Profile type code */
  3728. 'Preference':u, /* Profile code */
  3729. 'MessageBoxType':u, /* Profile data key */
  3730. 'No':u, /* Get next record flag */
  3731. input-output rRowid, /* Rowid of profile data */
  3732. output gcMessageBoxType ). /* Found profile data. */
  3733. /* if no user pref exists, use session params */
  3734. if gcMessageBoxType eq ? or gcMessageBoxType eq '':u then
  3735. gcMessageBoxType = dynamic-function('getSessionParam':u in target-procedure, 'MessageBoxType').
  3736. end. /* not set yet */
  3737. /* if no value can be found, use Complex as default */
  3738. if gcMessageBoxType eq ? or gcMessageBoxType eq '':u then
  3739. gcMessageBoxType = "Complex".
  3740. return gcMessageBoxType.
  3741. END FUNCTION. /* getMessageBoxType */
  3742. /* _UIB-CODE-BLOCK-END */
  3743. &ANALYZE-RESUME
  3744. &ENDIF
  3745. &IF DEFINED(EXCLUDE-getObjectHidden) = 0 &THEN
  3746. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectHidden Procedure
  3747. FUNCTION getObjectHidden RETURNS LOGICAL
  3748. ( ) :
  3749. /*------------------------------------------------------------------------------
  3750. Purpose: Returns a flag indicating whether the current object is hidden.
  3751. Note that "Hidden" is a logical concept in the ADM.
  3752. A non-visual object can be "hidden" to indicate that it is
  3753. not currently active in some way, because it is a
  3754. Container-Target of some visual object that is hidden.
  3755. Params: <none>
  3756. Returns: LOGICAL
  3757. ------------------------------------------------------------------------------*/
  3758. DEFINE VARIABLE lHidden AS LOGICAL NO-UNDO.
  3759. DEFINE VARIABLE lContainerHidden AS LOGICAL NO-UNDO.
  3760. {get ContainerHidden lContainerHidden}.
  3761. IF lContainerHidden THEN
  3762. RETURN YES.
  3763. ELSE
  3764. DO:
  3765. &SCOPED-DEFINE xpObjectHidden
  3766. {get ObjectHidden lHidden}.
  3767. &UNDEFINE xpObjectHidden
  3768. RETURN lHidden.
  3769. END.
  3770. END FUNCTION.
  3771. /* _UIB-CODE-BLOCK-END */
  3772. &ANALYZE-RESUME
  3773. &ENDIF
  3774. &IF DEFINED(EXCLUDE-getObjectInitialized) = 0 &THEN
  3775. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectInitialized Procedure
  3776. FUNCTION getObjectInitialized RETURNS LOGICAL
  3777. ( ) :
  3778. /*------------------------------------------------------------------------------
  3779. Purpose: Returns a flag indicating whether this object has been initialized.
  3780. Params: <none>
  3781. Returns: LOGICAL
  3782. ------------------------------------------------------------------------------*/
  3783. DEFINE VARIABLE lInitted AS LOGICAL NO-UNDO.
  3784. {get ObjectInitialized lInitted}.
  3785. RETURN lInitted.
  3786. END FUNCTION.
  3787. /* _UIB-CODE-BLOCK-END */
  3788. &ANALYZE-RESUME
  3789. &ENDIF
  3790. &IF DEFINED(EXCLUDE-getObjectName) = 0 &THEN
  3791. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectName Procedure
  3792. FUNCTION getObjectName RETURNS CHARACTER
  3793. ( ) :
  3794. /*------------------------------------------------------------------------------
  3795. Purpose: Returns the name of the object, which can be the filename
  3796. or some other designation meaningful to the repository and
  3797. other objects.
  3798. Returns: CHARACTER
  3799. Params: <none>
  3800. ------------------------------------------------------------------------------*/
  3801. DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
  3802. {get ObjectName cName}.
  3803. RETURN cName.
  3804. END FUNCTION.
  3805. /* _UIB-CODE-BLOCK-END */
  3806. &ANALYZE-RESUME
  3807. &ENDIF
  3808. &IF DEFINED(EXCLUDE-getObjectPage) = 0 &THEN
  3809. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectPage Procedure
  3810. FUNCTION getObjectPage RETURNS INTEGER
  3811. ( ) :
  3812. /*------------------------------------------------------------------------------
  3813. Purpose: Returns the logical page on which this object has been placed.
  3814. Params: <none>
  3815. Returns: INTEGER
  3816. ------------------------------------------------------------------------------*/
  3817. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  3818. {get ObjectPage iPage}.
  3819. RETURN iPage.
  3820. END FUNCTION.
  3821. /* _UIB-CODE-BLOCK-END */
  3822. &ANALYZE-RESUME
  3823. &ENDIF
  3824. &IF DEFINED(EXCLUDE-getObjectParent) = 0 &THEN
  3825. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectParent Procedure
  3826. FUNCTION getObjectParent RETURNS HANDLE
  3827. ( ) :
  3828. /*------------------------------------------------------------------------------
  3829. Purpose: Returns the widget handle of this object's Window or Frame parent,
  3830. that is, the handle of the visual container of its CONTAINER-SOURCE.
  3831. Params: <none>
  3832. Returns: HANDLE
  3833. Notes: Compare to ContainerHandle, which is the handle of *this* object's
  3834. Frame or Window if it has one.
  3835. ---------------------------------------------------------------------------*/
  3836. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  3837. {get ContainerHandle hObject}.
  3838. IF VALID-HANDLE(hObject) THEN
  3839. DO:
  3840. IF CAN-QUERY(hObject,"FRAME":U) AND VALID-HANDLE(hObject:FRAME) THEN
  3841. RETURN hObject:FRAME.
  3842. ELSE IF VALID-HANDLE(hObject:PARENT) THEN
  3843. RETURN hObject:PARENT.
  3844. ELSE RETURN ?.
  3845. END.
  3846. ELSE RETURN ?.
  3847. END FUNCTION.
  3848. /* _UIB-CODE-BLOCK-END */
  3849. &ANALYZE-RESUME
  3850. &ENDIF
  3851. &IF DEFINED(EXCLUDE-getObjectsCreated) = 0 &THEN
  3852. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectsCreated Procedure
  3853. FUNCTION getObjectsCreated RETURNS LOGICAL
  3854. ( ):
  3855. /*------------------------------------------------------------------------------
  3856. Purpose: Returns whether this object has run createObjects for page 0.
  3857. Params: <none>
  3858. Notes: This is used in createObjects to avoid double create. Some
  3859. containers run createObjects from the main block while others
  3860. start them from initializeObject. The create initializeObject is
  3861. often too late so this flag was introduced to allow us to have more
  3862. control over when the objects are created and run createObjects
  3863. before initializeObject for all objects without risking a double
  3864. create.
  3865. ----------------------------------------------------------------------------*/
  3866. DEFINE VARIABLE lCreated AS LOGICAL NO-UNDO.
  3867. {get ObjectsCreated lCreated}.
  3868. RETURN lCreated.
  3869. END FUNCTION.
  3870. /* _UIB-CODE-BLOCK-END */
  3871. &ANALYZE-RESUME
  3872. &ENDIF
  3873. &IF DEFINED(EXCLUDE-getObjectVersion) = 0 &THEN
  3874. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getObjectVersion Procedure
  3875. FUNCTION getObjectVersion RETURNS CHARACTER
  3876. ( ) :
  3877. /*------------------------------------------------------------------------------
  3878. Purpose: Returns the ADM version of the SmartObject
  3879. Params: <none>
  3880. Returns: CHARACTER
  3881. Notes: For Progress Version 9 objects, this will return "ADM2.0" or higher.
  3882. ------------------------------------------------------------------------------*/
  3883. DEFINE VARIABLE cVersion AS CHARACTER NO-UNDO.
  3884. {get ObjectVersion cVersion} NO-ERROR.
  3885. RETURN cVersion.
  3886. END FUNCTION.
  3887. /* _UIB-CODE-BLOCK-END */
  3888. &ANALYZE-RESUME
  3889. &ENDIF
  3890. &IF DEFINED(EXCLUDE-getParentDataKey) = 0 &THEN
  3891. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getParentDataKey Procedure
  3892. FUNCTION getParentDataKey RETURNS CHARACTER
  3893. ( /* parameter-definitions */ ) :
  3894. /*------------------------------------------------------------------------------
  3895. Purpose:
  3896. Notes:
  3897. ------------------------------------------------------------------------------*/
  3898. DEFINE VARIABLE cParentDataKey AS CHARACTER NO-UNDO.
  3899. {get ParentDataKey cParentDataKey}.
  3900. RETURN cParentDataKey.
  3901. END FUNCTION.
  3902. /* _UIB-CODE-BLOCK-END */
  3903. &ANALYZE-RESUME
  3904. &ENDIF
  3905. &IF DEFINED(EXCLUDE-getPassThroughLinks) = 0 &THEN
  3906. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPassThroughLinks Procedure
  3907. FUNCTION getPassThroughLinks RETURNS CHARACTER
  3908. ( ) :
  3909. /*------------------------------------------------------------------------------
  3910. Purpose: Returns the list of which link types are considered candidates
  3911. for creating "pass-through" links.
  3912. Params: <none>
  3913. Returns: CHARACTER
  3914. Notes: This property value is stored once in smart.p for all SmartObjects.
  3915. ------------------------------------------------------------------------------*/
  3916. RETURN scPassThroughLinks.
  3917. END FUNCTION.
  3918. /* _UIB-CODE-BLOCK-END */
  3919. &ANALYZE-RESUME
  3920. &ENDIF
  3921. &IF DEFINED(EXCLUDE-getPhysicalObjectName) = 0 &THEN
  3922. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPhysicalObjectName Procedure
  3923. FUNCTION getPhysicalObjectName RETURNS CHARACTER
  3924. ( /* parameter-definitions */ ) :
  3925. /*------------------------------------------------------------------------------
  3926. Purpose:
  3927. Notes:
  3928. ------------------------------------------------------------------------------*/
  3929. DEFINE VARIABLE cTemp AS CHARACTER NO-UNDO.
  3930. {get PhysicalObjectName cTemp}.
  3931. RETURN cTemp. /* Function return value. */
  3932. END FUNCTION.
  3933. /* _UIB-CODE-BLOCK-END */
  3934. &ANALYZE-RESUME
  3935. &ENDIF
  3936. &IF DEFINED(EXCLUDE-getPhysicalVersion) = 0 &THEN
  3937. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPhysicalVersion Procedure
  3938. FUNCTION getPhysicalVersion RETURNS CHARACTER
  3939. ( /* parameter-definitions */ ) :
  3940. /*------------------------------------------------------------------------------
  3941. Purpose:
  3942. Notes:
  3943. ------------------------------------------------------------------------------*/
  3944. DEFINE VARIABLE cVersion AS CHARACTER NO-UNDO.
  3945. {get PhysicalVersion cVersion}.
  3946. RETURN cVersion. /* Function return value. */
  3947. END FUNCTION.
  3948. /* _UIB-CODE-BLOCK-END */
  3949. &ANALYZE-RESUME
  3950. &ENDIF
  3951. &IF DEFINED(EXCLUDE-getPropertyDialog) = 0 &THEN
  3952. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPropertyDialog Procedure
  3953. FUNCTION getPropertyDialog RETURNS CHARACTER
  3954. ( ) :
  3955. /*------------------------------------------------------------------------------
  3956. Purpose: Returns the name of the dialog procedure that sets
  3957. InstanceProperties.
  3958. Params: <none>
  3959. Returns: CHARACTER
  3960. Notes: This property is usually used only internally, but must be callable
  3961. from the AppBuilder to determine whether to enable the
  3962. InstanceProperties menu item.
  3963. ------------------------------------------------------------------------------*/
  3964. DEFINE VARIABLE cDialog AS CHARACTER NO-UNDO.
  3965. {get PropertyDialog cDialog}.
  3966. RETURN cDialog.
  3967. END FUNCTION.
  3968. /* _UIB-CODE-BLOCK-END */
  3969. &ANALYZE-RESUME
  3970. &ENDIF
  3971. &IF DEFINED(EXCLUDE-getQueryObject) = 0 &THEN
  3972. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getQueryObject Procedure
  3973. FUNCTION getQueryObject RETURNS LOGICAL
  3974. ( ) :
  3975. /*------------------------------------------------------------------------------
  3976. Purpose: Returns a flag indicating whether this object queries data.
  3977. Notes: The data class and sbo class are both considered to be a QueryObject.
  3978. Note date: 2002/02/14
  3979. ------------------------------------------------------------------------------*/
  3980. DEFINE VARIABLE lQuery AS LOGICAL NO-UNDO.
  3981. {get QueryObject lQuery}.
  3982. RETURN lQuery.
  3983. END FUNCTION.
  3984. /* _UIB-CODE-BLOCK-END */
  3985. &ANALYZE-RESUME
  3986. &ENDIF
  3987. &IF DEFINED(EXCLUDE-getRenderingProcedure) = 0 &THEN
  3988. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getRenderingProcedure Procedure
  3989. FUNCTION getRenderingProcedure RETURNS CHARACTER
  3990. ( /* parameter-definitions */ ) :
  3991. /*------------------------------------------------------------------------------
  3992. Purpose: Return the rendering procedure
  3993. Notes:
  3994. ------------------------------------------------------------------------------*/
  3995. DEFINE VARIABLE cRenderingProcedure AS CHARACTER NO-UNDO.
  3996. {get RenderingProcedure cRenderingProcedure}.
  3997. RETURN cRenderingProcedure.
  3998. END FUNCTION.
  3999. /* _UIB-CODE-BLOCK-END */
  4000. &ANALYZE-RESUME
  4001. &ENDIF
  4002. &IF DEFINED(EXCLUDE-getRunAttribute) = 0 &THEN
  4003. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getRunAttribute Procedure
  4004. FUNCTION getRunAttribute RETURNS CHARACTER
  4005. ( /* parameter-definitions */ ) :
  4006. /*------------------------------------------------------------------------------
  4007. Purpose:
  4008. Notes:
  4009. ------------------------------------------------------------------------------*/
  4010. DEFINE VARIABLE cRunAttribute AS CHARACTER NO-UNDO.
  4011. {get RunAttribute cRunAttribute}.
  4012. RETURN cRunAttribute. /* Function return value. */
  4013. END FUNCTION.
  4014. /* _UIB-CODE-BLOCK-END */
  4015. &ANALYZE-RESUME
  4016. &ENDIF
  4017. &IF DEFINED(EXCLUDE-getServiceAdapterName) = 0 &THEN
  4018. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getServiceAdapterName Procedure
  4019. FUNCTION getServiceAdapterName RETURNS CHARACTER
  4020. ( ) :
  4021. /*------------------------------------------------------------------------------
  4022. Purpose: Returns the procedure name of the Service Adapter
  4023. Notes: Used by getManagerHandle('ServiceAdapter').
  4024. Override to use a separate/different service adapter
  4025. ------------------------------------------------------------------------------*/
  4026. RETURN "adm2/serviceadapter.p":U.
  4027. END FUNCTION.
  4028. /* _UIB-CODE-BLOCK-END */
  4029. &ANALYZE-RESUME
  4030. &ENDIF
  4031. &IF DEFINED(EXCLUDE-getSuperProcedure) = 0 &THEN
  4032. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSuperProcedure Procedure
  4033. FUNCTION getSuperProcedure RETURNS CHARACTER
  4034. ( ):
  4035. /*------------------------------------------------------------------------------
  4036. Purpose:
  4037. Notes:
  4038. ------------------------------------------------------------------------------*/
  4039. DEFINE VARIABLE cSuperProcedure AS CHARACTER NO-UNDO.
  4040. {get SuperProcedure cSuperProcedure}.
  4041. RETURN cSuperProcedure.
  4042. END FUNCTION.
  4043. /* _UIB-CODE-BLOCK-END */
  4044. &ANALYZE-RESUME
  4045. &ENDIF
  4046. &IF DEFINED(EXCLUDE-getSuperProcedureHandle) = 0 &THEN
  4047. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSuperProcedureHandle Procedure
  4048. FUNCTION getSuperProcedureHandle RETURNS CHARACTER
  4049. ( ):
  4050. /*------------------------------------------------------------------------------
  4051. Purpose:
  4052. Notes:
  4053. ------------------------------------------------------------------------------*/
  4054. DEFINE VARIABLE cProcedureHandle AS CHARACTER NO-UNDO.
  4055. {get SuperProcedureHandle cProcedureHandle}.
  4056. RETURN cProcedureHandle.
  4057. END FUNCTION. /* getSuperProcedureHandle */
  4058. /* _UIB-CODE-BLOCK-END */
  4059. &ANALYZE-RESUME
  4060. &ENDIF
  4061. &IF DEFINED(EXCLUDE-getSuperProcedureMode) = 0 &THEN
  4062. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSuperProcedureMode Procedure
  4063. FUNCTION getSuperProcedureMode RETURNS CHARACTER
  4064. ( ):
  4065. /*------------------------------------------------------------------------------
  4066. Purpose:
  4067. Notes:
  4068. ------------------------------------------------------------------------------*/
  4069. DEFINE VARIABLE cProcedureMode AS CHARACTER NO-UNDO.
  4070. {get SuperProcedureMode cProcedureMode}.
  4071. RETURN cProcedureMode.
  4072. END FUNCTION. /* getSuperProcedureMode */
  4073. /* _UIB-CODE-BLOCK-END */
  4074. &ANALYZE-RESUME
  4075. &ENDIF
  4076. &IF DEFINED(EXCLUDE-getSupportedLinks) = 0 &THEN
  4077. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSupportedLinks Procedure
  4078. FUNCTION getSupportedLinks RETURNS CHARACTER
  4079. ( ) :
  4080. /*------------------------------------------------------------------------------
  4081. Purpose: Returns a list of the SmartObject links supported by this object.
  4082. Params: <none>
  4083. Returns: CHARACTER
  4084. ------------------------------------------------------------------------------*/
  4085. DEFINE VARIABLE cLinks AS CHARACTER NO-UNDO.
  4086. {get SupportedLinks cLinks}.
  4087. RETURN cLinks.
  4088. END FUNCTION.
  4089. /* _UIB-CODE-BLOCK-END */
  4090. &ANALYZE-RESUME
  4091. &ENDIF
  4092. &IF DEFINED(EXCLUDE-getThinRenderingProcedure) = 0 &THEN
  4093. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getThinRenderingProcedure Procedure
  4094. FUNCTION getThinRenderingProcedure RETURNS CHARACTER
  4095. ( /* parameter-definitions */ ) :
  4096. /*------------------------------------------------------------------------------
  4097. Purpose: Return the thin rendering procedure
  4098. Notes:
  4099. ------------------------------------------------------------------------------*/
  4100. DEFINE VARIABLE cThinRenderingProcedure AS CHARACTER NO-UNDO.
  4101. {get ThinRenderingProcedure cThinRenderingProcedure}.
  4102. RETURN cThinRenderingProcedure.
  4103. END FUNCTION.
  4104. /* _UIB-CODE-BLOCK-END */
  4105. &ANALYZE-RESUME
  4106. &ENDIF
  4107. &IF DEFINED(EXCLUDE-getTranslatableProperties) = 0 &THEN
  4108. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTranslatableProperties Procedure
  4109. FUNCTION getTranslatableProperties RETURNS CHARACTER
  4110. ( ) :
  4111. /*------------------------------------------------------------------------------
  4112. Purpose: Returns a list of translatable properties for the object.
  4113. Params: <none>
  4114. Returns: CHARACTER
  4115. ------------------------------------------------------------------------------*/
  4116. DEFINE VARIABLE cProps AS CHARACTER NO-UNDO.
  4117. {get TranslatableProperties cProps} NO-ERROR.
  4118. RETURN cProps.
  4119. END FUNCTION.
  4120. /* _UIB-CODE-BLOCK-END */
  4121. &ANALYZE-RESUME
  4122. &ENDIF
  4123. &IF DEFINED(EXCLUDE-getUIBMode) = 0 &THEN
  4124. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getUIBMode Procedure
  4125. FUNCTION getUIBMode RETURNS CHARACTER
  4126. ( ) :
  4127. /*------------------------------------------------------------------------------
  4128. Purpose: Returns the UIB Mode property to indicate whether this object is
  4129. in Design mode in the AppBuilder.
  4130. Params: <none>
  4131. Returns: CHARACTER
  4132. Notes: This will return blank if the object is not in design mode,
  4133. that is, not running in an AppBuilder design window. It will
  4134. return "Design" if in design mode, or "Design-Child" if it is
  4135. contained in another SmartObject which is in design mode
  4136. (such as a SmartFrame). It will return ? if the object is not
  4137. a SmartObject (does not have a valid handle in ADM-DATA).
  4138. ------------------------------------------------------------------------------*/
  4139. DEFINE VARIABLE cMode AS CHARACTER NO-UNDO INIT ?.
  4140. {get UIBMode cMode}.
  4141. RETURN cMode.
  4142. END FUNCTION.
  4143. /* _UIB-CODE-BLOCK-END */
  4144. &ANALYZE-RESUME
  4145. &ENDIF
  4146. &IF DEFINED(EXCLUDE-getUseRepository) = 0 &THEN
  4147. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getUseRepository Procedure
  4148. FUNCTION getUseRepository RETURNS LOGICAL
  4149. ( ) :
  4150. /*------------------------------------------------------------------------------
  4151. Purpose:
  4152. Notes:
  4153. ------------------------------------------------------------------------------*/
  4154. /* The Icf session manager will have this in a super procedure of the session */
  4155. IF glIcfIsRunning EQ ? THEN
  4156. glIcfIsRunning = DYNAMIC-FUNCTION('isICFRunning':U IN THIS-PROCEDURE) NO-ERROR.
  4157. /* Return no if unknown !*/
  4158. RETURN glIcfIsRunning = TRUE.
  4159. END FUNCTION.
  4160. /* _UIB-CODE-BLOCK-END */
  4161. &ANALYZE-RESUME
  4162. &ENDIF
  4163. &IF DEFINED(EXCLUDE-getUserProperty) = 0 &THEN
  4164. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getUserProperty Procedure
  4165. FUNCTION getUserProperty RETURNS CHARACTER
  4166. ( pcPropName AS CHARACTER ) :
  4167. /*------------------------------------------------------------------------------
  4168. Purpose: Retrieves the value of a dynamically-defined property.
  4169. Params: pcPropName AS CHARACTER
  4170. Returns: CHARACTER: property value in character form
  4171. Notes: Dynamically-defined properties are currently stored in a list
  4172. in the ADM-DATA procedure attribute, delimited by CHR(3),
  4173. with CHR(4) between property name and value. However,
  4174. it should not be necessary for developers to be aware of the s
  4175. pecific storage mechanism for dynamically-defined properties,
  4176. which could be subject to change in the future.
  4177. ------------------------------------------------------------------------------*/
  4178. DEFINE VARIABLE cProps AS CHARACTER NO-UNDO.
  4179. DEFINE VARIABLE cPropVal AS CHARACTER NO-UNDO.
  4180. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  4181. cProps = ENTRY(2, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  4182. DO iEntry = 1 TO NUM-ENTRIES(cProps, CHR(3)):
  4183. cPropVal = ENTRY(iEntry, cProps, CHR(3)).
  4184. IF ENTRY(1, cPropVal, CHR(4)) = pcPropName THEN
  4185. RETURN ENTRY(2, cPropVal, CHR(4)).
  4186. END. /* END DO iEntry */
  4187. RETURN ?. /* Property was not found. */
  4188. END FUNCTION.
  4189. /* _UIB-CODE-BLOCK-END */
  4190. &ANALYZE-RESUME
  4191. &ENDIF
  4192. &IF DEFINED(EXCLUDE-instanceOf) = 0 &THEN
  4193. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION instanceOf Procedure
  4194. FUNCTION instanceOf RETURNS LOGICAL
  4195. ( INPUT pcClass AS CHARACTER ) :
  4196. /*------------------------------------------------------------------------------
  4197. Purpose: Resolve if this is an instance Of a particular class/object type
  4198. Notes: For Dynamics this does include the inheritance hierarchy
  4199. ------------------------------------------------------------------------------*/
  4200. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  4201. DEFINE VARIABLE cObjectType AS CHARACTER NO-UNDO.
  4202. IF VALID-HANDLE(gshRepositoryManager) THEN
  4203. DO:
  4204. {get ClassName cClassName}.
  4205. /* Using ClassIsA is more robust because IsA() depends on this
  4206. object being in the object cache. In addition, ClassIsA() will
  4207. attempt to cache the class if it is not already cached, something
  4208. that IsA() cannot do.
  4209. */
  4210. IF cClassName EQ pcClass THEN
  4211. RETURN TRUE.
  4212. ELSE if cClassName > ""
  4213. AND DYNAMIC-FUNCTION('ClassIsA':U IN gshRepositoryManager, cClassName, pcClass) then
  4214. RETURN TRUE.
  4215. END. /* Using the Repository */
  4216. /* allow transparent references for Dynamics classes in adm2 */
  4217. case pcClass:
  4218. when "Base":U then pcClass = "Smart":U.
  4219. when "DynCombo":U then pcClass = "Combo":U.
  4220. when "DynLookup":U then pcClass = "Lookup":U.
  4221. when "DataVisual":U then pcClass = "Datavis":U.
  4222. when "Container":U then pcClass = "Containr":U.
  4223. end.
  4224. /* check super stack */
  4225. if {fnarg instanceOfSuper pcClass} then
  4226. return true.
  4227. /* somewhat questionable perhaps, but needed for backwards compatibilty
  4228. with early versions */
  4229. {get ObjectType cObjectType}.
  4230. return pcClass = cObjectType.
  4231. END FUNCTION. /* instanceOf */
  4232. /* _UIB-CODE-BLOCK-END */
  4233. &ANALYZE-RESUME
  4234. &ENDIF
  4235. &IF DEFINED(EXCLUDE-instancePropertyList) = 0 &THEN
  4236. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION instancePropertyList Procedure
  4237. FUNCTION instancePropertyList RETURNS CHARACTER
  4238. ( pcPropList AS CHARACTER ) :
  4239. /*------------------------------------------------------------------------------
  4240. Purpose: Returns a list of the values of the names of the object's
  4241. InstanceProperties, that is those properties which can be set
  4242. to initial values in design mode.
  4243. These can be set in the AppBuilder to determine the object
  4244. instance's behavior at runtime.
  4245. Params: INPUT pcPropList AS CHARACTER -- optional list of properties wanted.
  4246. The default (when this parameter is blank) is all the InstanceProps;
  4247. other valid options are "*", for all properties, or a list of
  4248. specific properties wanted.
  4249. Returns: CHARACTER: delimited list of property name/value pairs with CHR(3)
  4250. between pairs and CHR(4) between name and value.
  4251. ------------------------------------------------------------------------------*/
  4252. DEFINE VARIABLE cInstanceProperties AS CHARACTER NO-UNDO.
  4253. DEFINE VARIABLE iNumProps AS INTEGER NO-UNDO.
  4254. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  4255. DEFINE VARIABLE iProc AS INTEGER NO-UNDO.
  4256. DEFINE VARIABLE cProcs AS CHARACTER NO-UNDO.
  4257. DEFINE VARIABLE hProc AS HANDLE NO-UNDO.
  4258. DEFINE VARIABLE cPropValues AS CHARACTER NO-UNDO INIT '':U.
  4259. DEFINE VARIABLE cProperty AS CHARACTER NO-UNDO.
  4260. DEFINE VARIABLE cSignature AS CHARACTER NO-UNDO.
  4261. DEFINE VARIABLE cEntries AS CHARACTER NO-UNDO.
  4262. DEFINE VARIABLE lTranslate AS LOGICAL NO-UNDO INIT no.
  4263. DEFINE VARIABLE cTranslatable AS CHARACTER NO-UNDO.
  4264. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  4265. IF pcPropList = 'ADM-TRANSLATABLE-FORMAT':U THEN
  4266. DO:
  4267. lTranslate = yes.
  4268. {get TranslatableProperties cTranslatable}.
  4269. pcPropList = "":U.
  4270. END.
  4271. IF pcPropList = "":U OR pcPropList = ? THEN
  4272. {get InstanceProperties cInstanceProperties}. /* Default */
  4273. ELSE IF pcPropList = '*':U THEN
  4274. DO:
  4275. /* For now at least we define properties as being identified by a
  4276. function that begins "get" without a following hyphen and which takes
  4277. no arguments. We build a list of all of those properties, looking
  4278. in the object itself and in all its super procedures. */
  4279. cProcs = STRING(TARGET-PROCEDURE) + ",":U +
  4280. TARGET-PROCEDURE:SUPER-PROCEDURES.
  4281. DO iProc = 1 TO NUM-ENTRIES(cProcs):
  4282. hProc = WIDGET-HANDLE(ENTRY(iProc, cProcs)).
  4283. IF VALID-HANDLE(hproc) THEN
  4284. DO:
  4285. cEntries = hProc:INTERNAL-ENTRIES.
  4286. iNumProps = NUM-ENTRIES(cEntries).
  4287. DO iEntry = 1 TO iNumProps:
  4288. cProperty = ENTRY(iEntry, cEntries).
  4289. /* If there's a get property and it's not already in our list... */
  4290. IF cProperty BEGINS "get":U and SUBSTR(cProperty,4,1) NE "-":U
  4291. AND LOOKUP(SUBSTR(cProperty, 4), cInstanceProperties) = 0 THEN
  4292. DO:
  4293. cSignature = hProc:GET-SIGNATURE(cProperty).
  4294. IF ENTRY(1, cSignature) = "FUNCTION":U AND /* It's a function... */
  4295. NUM-ENTRIES(cSignature) = 3 AND /* Null 3rd entry means no args */
  4296. ENTRY(3, cSignature) = "":U THEN
  4297. cInstanceProperties = cInstanceProperties +
  4298. (IF cInstanceProperties NE '':U THEN ',':U ELSE '':U ) +
  4299. SUBSTR(cProperty, 4). /* Skip the "get" prefix */
  4300. END. /* END DO IF get */
  4301. END. /* END DO IEntry */
  4302. END. /* END DO IF VALID-HANDLE(hProc) */
  4303. END. /* END DO iProc */
  4304. /* Now add any ad hoc properties which have been defined. */
  4305. cEntries = ENTRY(2, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  4306. DO iEntry = 1 TO NUM-ENTRIES(cEntries, CHR(3)):
  4307. cInstanceProperties = cInstanceProperties +
  4308. (IF cInstanceProperties NE '':U THEN ',':U ELSE '':U ) +
  4309. ENTRY(1,ENTRY(iEntry, cEntries, CHR(3)),CHR(4)).
  4310. END. /* END DO iEntry */
  4311. END. /* END DO IF "*" */
  4312. ELSE cInstanceProperties = pcPropList. /* Give them the ones they asked for. */
  4313. IF lTranslate THEN cPropValues = "'":U. /* In quotes if xlatable */
  4314. iNumProps = NUM-ENTRIES(cInstanceProperties).
  4315. IF lTranslate AND (iNumProps = 0) THEN /* If no properties at all, */
  4316. cPropValues = "''":U. /* just close the quote.*/
  4317. DO iEntry = 1 TO iNumProps:
  4318. cProperty = ENTRY(iEntry, cInstanceProperties).
  4319. /* We better avoid calling asHandle if unbound as this actually will
  4320. do a bind ..*/
  4321. IF cProperty = 'AsHandle':U AND NOT {fn getAsBound} THEN
  4322. cValue = '':U.
  4323. ELSE DO:
  4324. cValue = STRING(dynamic-function('get':U + cProperty IN TARGET-PROCEDURE))
  4325. NO-ERROR.
  4326. IF cValue = ? THEN
  4327. DO:
  4328. /* This is an ad hoc user property. */
  4329. IF ERROR-STATUS:GET-MESSAGE(1) > '':U THEN
  4330. DO:
  4331. /* pre v10.1B used to set all unknown to blank,
  4332. kept this after cleanup, could possibly do next
  4333. as unknown means non-existing user prop */
  4334. cValue = {fnarg getUserProperty cProperty}.
  4335. IF cValue = ? THEN
  4336. cValue = '':U.
  4337. END.
  4338. ELSE
  4339. cValue = "?":U.
  4340. END.
  4341. END.
  4342. IF lTranslate THEN /* Return the special form with :Us */
  4343. DO:
  4344. cPropValues = cPropValues + (IF cPropValues NE "'":U THEN CHR(3) ELSE '':U)
  4345. + cProperty + CHR(4).
  4346. IF LOOKUP(cProperty, cTranslatable) NE 0 THEN
  4347. DO:
  4348. cPropValues = cPropValues + "':U + '":U + cValue + "'":U.
  4349. IF iEntry NE iNumProps THEN cPropValues = cPropValues + " + '":U.
  4350. END.
  4351. ELSE cPropValues = cPropValues + cValue. /* This one's not xlatable */
  4352. END. /* END if lTranslate */
  4353. ELSE cPropValues = cPropValues + (IF cPropValues NE '':U THEN CHR(3) ELSE '':U)
  4354. + cProperty + CHR(4) + cValue.
  4355. END.
  4356. /* If this is the last property and the user wants the translatable format
  4357. and this last property was not translatable, then put ':U at the end. */
  4358. IF lTranslate AND LOOKUP(cProperty, cTranslatable) = 0 THEN
  4359. cPropValues = cPropValues + "':U":U.
  4360. RETURN cPropValues.
  4361. END FUNCTION.
  4362. /* _UIB-CODE-BLOCK-END */
  4363. &ANALYZE-RESUME
  4364. &ENDIF
  4365. &IF DEFINED(EXCLUDE-isDialogBoxParent) = 0 &THEN
  4366. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION isDialogBoxParent Procedure
  4367. FUNCTION isDialogBoxParent RETURNS LOGICAL
  4368. ( INPUT hWidget AS HANDLE ) :
  4369. /*------------------------------------------------------------------------------
  4370. Purpose: TRUE if any parent widget of 'hWidget' is a DIALOG-BOX
  4371. Notes:
  4372. ------------------------------------------------------------------------------*/
  4373. IF VALID-HANDLE(hWidget) THEN
  4374. IF hWidget:TYPE = "DIALOG-BOX":U THEN
  4375. RETURN TRUE.
  4376. ELSE
  4377. IF CAN-QUERY(hWidget, "PARENT":U) THEN
  4378. RETURN isDialogBoxParent(hWidget:PARENT).
  4379. ELSE
  4380. RETURN FALSE.
  4381. ELSE
  4382. RETURN FALSE.
  4383. END FUNCTION.
  4384. /* _UIB-CODE-BLOCK-END */
  4385. &ANALYZE-RESUME
  4386. &ENDIF
  4387. &IF DEFINED(EXCLUDE-isFunctionInCallStack) = 0 &THEN
  4388. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION isFunctionInCallStack Procedure
  4389. FUNCTION isFunctionInCallStack RETURNS LOGICAL
  4390. ( /* parameter-definitions */ ) :
  4391. /*------------------------------------------------------------------------------
  4392. Purpose: Returns TRUE if there is a Function in the call stack.
  4393. Notes:
  4394. ------------------------------------------------------------------------------*/
  4395. DEFINE VARIABLE cSuperList AS CHARACTER NO-UNDO.
  4396. DEFINE VARIABLE cSuperNameList AS CHARACTER NO-UNDO.
  4397. DEFINE VARIABLE iVar AS INTEGER NO-UNDO INIT 1.
  4398. DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
  4399. DEFINE VARIABLE cIpName AS CHARACTER NO-UNDO.
  4400. DEFINE VARIABLE hProcedure AS HANDLE NO-UNDO.
  4401. DEFINE VARIABLE cSignature AS CHARACTER NO-UNDO.
  4402. DEFINE VARIABLE iIdx AS INTEGER NO-UNDO.
  4403. /* create a list of session procedures and their names */
  4404. hProcedure = SESSION:FIRST-PROCEDURE.
  4405. REPEAT WHILE valid-handle(hProcedure):
  4406. IF hProcedure:TYPE = "PROCEDURE":U THEN
  4407. ASSIGN
  4408. cSuperList = cSuperList + (IF cSuperList > "" THEN "," ELSE "") +
  4409. STRING(hProcedure)
  4410. cSuperNameList = cSuperNameList +
  4411. (IF cSuperNameList > "" THEN "," ELSE "") +
  4412. hProcedure:FILE-NAME.
  4413. hProcedure = hProcedure:NEXT-SIBLING.
  4414. END.
  4415. /* scan the call stack until a fuction is found (return true) or we reach */
  4416. /* the end of the stack (return false) */
  4417. REPEAT:
  4418. ASSIGN
  4419. iVar = iVar + 1 /* do not include THIS function */
  4420. cName = PROGRAM-NAME(iVar)
  4421. hProcedure = ?.
  4422. IF cName = ? OR cName = '' /* 20030306-008, iz9204 */ THEN /* end of stack */
  4423. LEAVE.
  4424. IF NUM-ENTRIES(cName, " ") = 1 THEN
  4425. NEXT. /* not interested in external procedures */
  4426. ASSIGN
  4427. cIpName = ENTRY(1, cname, " ")
  4428. cName = ENTRY(2, cname, " ")
  4429. iIdx = LOOKUP(cName, cSuperNameList).
  4430. IF iIdx > 0 THEN
  4431. hProcedure = WIDGET-HANDLE(ENTRY(iIdx, cSuperList)).
  4432. IF VALID-HANDLE(hProcedure) THEN
  4433. IF entry(1, hProcedure:GET-SIGNATURE(cIpName)) = "FUNCTION":U THEN
  4434. RETURN TRUE.
  4435. END.
  4436. RETURN FALSE.
  4437. END FUNCTION.
  4438. /* _UIB-CODE-BLOCK-END */
  4439. &ANALYZE-RESUME
  4440. &ENDIF
  4441. &IF DEFINED(EXCLUDE-isLinkInactive) = 0 &THEN
  4442. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION isLinkInactive Procedure
  4443. FUNCTION isLinkInactive RETURNS LOGICAL
  4444. (pcLinkType AS CHAR,
  4445. phObject AS HANDLE):
  4446. /*------------------------------------------------------------------------------
  4447. Purpose: Check if a particular link is inactivate
  4448. Parameters:
  4449. pcLinkType - LinkType f.ex 'DataSource'.
  4450. phObject - Object in other end of link
  4451. - ? - if object does not matter
  4452. may be used with links that only supports one object
  4453. or cases where one only need to know if any link is
  4454. inactive (or all links are active).
  4455. Notes: Whenever possible pass in the object as single links may change
  4456. to multiple links.
  4457. - The inactivelinks property is maintained by the modifyInactiveLinks
  4458. function.
  4459. ------------------------------------------------------------------------------*/
  4460. DEFINE VARIABLE iPos AS INTEGER NO-UNDO.
  4461. DEFINE VARIABLE cLinks AS CHARACTER NO-UNDO.
  4462. DEFINE VARIABLE cHandles AS CHARACTER NO-UNDO.
  4463. /* Ignore ANY dashes in linkname */
  4464. pcLinkType = REPLACE(pcLinkType,'-':U,'':U).
  4465. {get InactiveLinks cLinks}.
  4466. iPos = LOOKUP(pcLinkType,cLinks).
  4467. IF iPos > 0 AND phObject <> ? THEN
  4468. DO:
  4469. cHandles = ENTRY(iPos + 1,cLinks).
  4470. RETURN LOOKUP(STRING(phObject),cHandles,';':U) > 0.
  4471. END.
  4472. ELSE
  4473. RETURN iPos > 0.
  4474. END FUNCTION.
  4475. /* _UIB-CODE-BLOCK-END */
  4476. &ANALYZE-RESUME
  4477. &ENDIF
  4478. &IF DEFINED(EXCLUDE-linkHandles) = 0 &THEN
  4479. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION linkHandles Procedure
  4480. FUNCTION linkHandles RETURNS CHARACTER
  4481. ( pcLink AS CHARACTER ) :
  4482. /*------------------------------------------------------------------------------
  4483. Purpose: Takes a link name and returns a list of handles of objects at
  4484. the other end of that link, relative to the TARGET-PROCEDURE.
  4485. Params: pcLink AS CHARACTER -- Link name (including "-SOURCE" or "-TARGET")
  4486. Returns: CHARACTER: comma-separated list of handles
  4487. Notes: ADM2 version of get-link-handle IN V8. NOTE: If the link type
  4488. does not exist in the object "" will be returned, not ?.
  4489. ------------------------------------------------------------------------------*/
  4490. DEFINE VARIABLE cObjects AS CHARACTER NO-UNDO.
  4491. DEFINE VARIABLE cLinkList AS CHARACTER NO-UNDO.
  4492. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  4493. DEFINE VARIABLE cLinkEntry AS CHARACTER NO-UNDO.
  4494. cObjects = dynamic-function
  4495. ("get":U + TRIM(SUBSTR(pcLink, 1, R-INDEX(pcLink,"-":U) - 1) +
  4496. SUBSTR(pcLink, R-INDEX(pcLink, "-":U) + 1)) IN TARGET-PROCEDURE) NO-ERROR.
  4497. IF cObjects = ? THEN
  4498. DO:
  4499. /* Unknown means this is not a standard SupportedLink; so get the
  4500. handle from ADM-DATA (see modifyUserLinks for format). */
  4501. cObjects = "":U. /* Init to blank in case it's not found here. */
  4502. cLinkList = ENTRY(3, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  4503. DO iEntry = 1 TO NUM-ENTRIES(cLinkList, CHR(3)):
  4504. cLinkEntry = ENTRY(iEntry, cLinkList, CHR(3)).
  4505. IF ENTRY(1, cLinkEntry, CHR(4)) = pcLink THEN
  4506. DO:
  4507. cObjects = ENTRY(2, cLinkEntry, CHR(4)).
  4508. LEAVE.
  4509. END. /* END DO IF ENTRY(1, */
  4510. END. /* END DO iEntry */
  4511. END. /* END DO IF ? */
  4512. RETURN cObjects.
  4513. END FUNCTION.
  4514. /* _UIB-CODE-BLOCK-END */
  4515. &ANALYZE-RESUME
  4516. &ENDIF
  4517. &IF DEFINED(EXCLUDE-linkProperty) = 0 &THEN
  4518. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION linkProperty Procedure
  4519. FUNCTION linkProperty RETURNS CHARACTER
  4520. ( pcLink AS CHARACTER, pcPropName AS CHARACTER ) :
  4521. /*------------------------------------------------------------------------------
  4522. Purpose: Returns the value of the requested property in the object at the
  4523. other end of the specified link, relative to TARGET-PROCEDURE.
  4524. Params: INPUT pcLink AS CHARACTER -- Link name,
  4525. INPUT pcPropName AS CHARACTER -- Property name.
  4526. Returns: CHARACTER: property value in character form
  4527. Notes: ADM2 Version of request-attribute in V8. The value is returned in
  4528. character format. If there is not exactly one object at the other
  4529. end of the link, or that object is no longer there,
  4530. the unknown value is returned.
  4531. ------------------------------------------------------------------------------*/
  4532. DEFINE VARIABLE cObject AS CHARACTER NO-UNDO.
  4533. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  4534. cObject = dynamic-function ("get":U +
  4535. TRIM(SUBSTR(pcLink, 1, R-INDEX(pcLink,"-":U) - 1) +
  4536. SUBSTR(pcLink, R-INDEX(pcLink, "-":U) + 1)) IN TARGET-PROCEDURE).
  4537. IF cObject NE ? AND NUM-ENTRIES(cObject) = 1 THEN
  4538. DO:
  4539. cValue = STRING(dynamic-function
  4540. ("get":U + pcPropName IN WIDGET-HANDLE(cObject))) NO-ERROR.
  4541. RETURN cValue.
  4542. END.
  4543. ELSE RETURN ?.
  4544. END FUNCTION.
  4545. /* _UIB-CODE-BLOCK-END */
  4546. &ANALYZE-RESUME
  4547. &ENDIF
  4548. &IF DEFINED(EXCLUDE-mappedEntry) = 0 &THEN
  4549. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION mappedEntry Procedure
  4550. FUNCTION mappedEntry RETURNS CHARACTER
  4551. (pcEntry AS CHAR,
  4552. pcList AS CHAR,
  4553. plFirst AS LOG,
  4554. pcDelimiter AS CHAR) :
  4555. /*------------------------------------------------------------------------------
  4556. Purpose: Return the 'other' entry in a separated list of paired entries.
  4557. This is required to ensure that the lookup does not find a matching
  4558. entry in the wrong part of the pair.
  4559. Parameters: INPUT pcEntry - entry to lookup.
  4560. INPUT pcList - comma separated list with paired entries.
  4561. INPUT plFirst - TRUE - lookup first and RETURN second.
  4562. FALSE - lookup second and RETURN first.
  4563. INPUT pcDelmiter - Delimiter of pcList
  4564. Notes: Used to find mapped RowObject or database column in assignList.
  4565. In other cases, such as the ObjectMapping property of SBOs, an
  4566. entry may occur more than once in the list, in which case a list
  4567. of matching values is returned, using the same delimiter as the list.
  4568. - Returns ? if no entry is found
  4569. ------------------------------------------------------------------------------*/
  4570. DEFINE VARIABLE iLookUp AS INTEGER NO-UNDO.
  4571. DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
  4572. DEFINE VARIABLE cValues AS CHARACTER NO-UNDO.
  4573. /* We use a work list so we are free to remove entries from it without
  4574. risking to remove the value that we eventually want to return */
  4575. ASSIGN
  4576. cValues = ? /* Set to ? to identify not found (Blank may be found) */
  4577. cList = pcList.
  4578. DO WHILE TRUE:
  4579. iLookup = LOOKUP(pcEntry,cList,pcDelimiter).
  4580. /* The entry is no longer in the list or not at all, so return any values
  4581. we have found in earlier passes; if none found unknown will be returned.*/
  4582. IF iLookup = 0 OR iLookup = ? THEN
  4583. RETURN cValues.
  4584. /* If this is the correct half of the pair add the other part from the
  4585. original list to the list of values to return. */
  4586. IF iLookup MODULO 2 = (IF plFirst THEN 1 ELSE 0) THEN
  4587. cValues = (IF cValues <> ? THEN cValues + pcDelimiter ELSE '':U)
  4588. + ENTRY(IF plFirst THEN (iLookup + 1) ELSE (iLookup - 1),
  4589. pcList,
  4590. pcDelimiter).
  4591. /* We remove this entry (right or wrong) from the work list to be able
  4592. to lookup the next. (Setting it to blank if we are looking for blank
  4593. will cause an endless loop so we set it to '?' in that case )*/
  4594. ENTRY(iLookup,cList,pcDelimiter) = IF pcEntry <> '':U THEN '':U ELSE '?':U.
  4595. END. /* do while true */
  4596. END FUNCTION.
  4597. /* _UIB-CODE-BLOCK-END */
  4598. &ANALYZE-RESUME
  4599. &ENDIF
  4600. &IF DEFINED(EXCLUDE-mergeLists) = 0 &THEN
  4601. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION mergeLists Procedure
  4602. FUNCTION mergeLists RETURNS CHARACTER
  4603. ( pcList1 AS CHAR,
  4604. pcList2 AS CHAR,
  4605. pcDlm1 AS CHAR,
  4606. pcDlm2 AS CHAR,
  4607. pcNewDlm AS CHAR) :
  4608. /*------------------------------------------------------------------------------
  4609. Purpose: Return a paired list of two lists
  4610. Notes: The main reason that this exists is performance, it is approx
  4611. 50% faster to merge without a loop.
  4612. ------------------------------------------------------------------------------*/
  4613. DEFINE VARIABLE iNumEntries AS INTEGER NO-UNDO.
  4614. DEFINE VARIABLE cMergeList AS CHARACTER NO-UNDO.
  4615. DEFINE VARIABLE iNum AS INTEGER NO-UNDO.
  4616. ASSIGN
  4617. pcDlm1 = IF pcDlm1 = '':U THEN ' ':U ELSE IF pcDlm1 <> ? THEN pcDlm1 ELSE ',':U
  4618. pcDlm2 = IF pcDlm2 = '':U THEN ' ':U ELSE IF pcDlm2 <> ? THEN pcDlm2 ELSE ',':U
  4619. pcNewDlm = IF pcNewDlm = '':U THEN ' ':U ELSE IF pcNewDlm <> ? THEN pcNewDlm ELSE ',':U
  4620. iNumEntries = NUM-ENTRIES(pcList1,pcDlm1).
  4621. /* New assign for WHEN evaluation of iNumentries */
  4622. ASSIGN
  4623. cMergeList = REPLACE(pcList1,pcDlm1,pcNewDlm)
  4624. ENTRY(( 1 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 1,pcList1,pcDlm1) + pcNewDlm + ENTRY( 1,pcList2,pcDlm2) WHEN iNumEntries >= 1
  4625. ENTRY(( 2 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 2,pcList1,pcDlm1) + pcNewDlm + ENTRY( 2,pcList2,pcDlm2) WHEN iNumEntries >= 2
  4626. ENTRY(( 3 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 3,pcList1,pcDlm1) + pcNewDlm + ENTRY( 3,pcList2,pcDlm2) WHEN iNumEntries >= 3
  4627. ENTRY(( 4 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 4,pcList1,pcDlm1) + pcNewDlm + ENTRY( 4,pcList2,pcDlm2) WHEN iNumEntries >= 4
  4628. ENTRY(( 5 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 5,pcList1,pcDlm1) + pcNewDlm + ENTRY( 5,pcList2,pcDlm2) WHEN iNumEntries >= 5
  4629. ENTRY(( 6 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 6,pcList1,pcDlm1) + pcNewDlm + ENTRY( 6,pcList2,pcDlm2) WHEN iNumEntries >= 6
  4630. ENTRY(( 7 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 7,pcList1,pcDlm1) + pcNewDlm + ENTRY( 7,pcList2,pcDlm2) WHEN iNumEntries >= 7
  4631. ENTRY(( 8 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 8,pcList1,pcDlm1) + pcNewDlm + ENTRY( 8,pcList2,pcDlm2) WHEN iNumEntries >= 8
  4632. ENTRY(( 9 * 2) - 1,cMergelist,pcNewDlm) = ENTRY( 9,pcList1,pcDlm1) + pcNewDlm + ENTRY( 9,pcList2,pcDlm2) WHEN iNumEntries >= 9
  4633. ENTRY((10 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(10,pcList1,pcDlm1) + pcNewDlm + ENTRY(10,pcList2,pcDlm2) WHEN iNumEntries >= 10
  4634. ENTRY((11 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(11,pcList1,pcDlm1) + pcNewDlm + ENTRY(11,pcList2,pcDlm2) WHEN iNumEntries >= 11
  4635. ENTRY((12 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(12,pcList1,pcDlm1) + pcNewDlm + ENTRY(12,pcList2,pcDlm2) WHEN iNumEntries >= 12
  4636. ENTRY((13 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(13,pcList1,pcDlm1) + pcNewDlm + ENTRY(13,pcList2,pcDlm2) WHEN iNumEntries >= 13
  4637. ENTRY((14 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(14,pcList1,pcDlm1) + pcNewDlm + ENTRY(14,pcList2,pcDlm2) WHEN iNumEntries >= 14
  4638. ENTRY((15 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(15,pcList1,pcDlm1) + pcNewDlm + ENTRY(15,pcList2,pcDlm2) WHEN iNumEntries >= 15
  4639. ENTRY((16 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(16,pcList1,pcDlm1) + pcNewDlm + ENTRY(16,pcList2,pcDlm2) WHEN iNumEntries >= 16
  4640. ENTRY((17 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(17,pcList1,pcDlm1) + pcNewDlm + ENTRY(17,pcList2,pcDlm2) WHEN iNumEntries >= 17
  4641. ENTRY((18 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(18,pcList1,pcDlm1) + pcNewDlm + ENTRY(18,pcList2,pcDlm2) WHEN iNumEntries >= 18
  4642. ENTRY((19 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(19,pcList1,pcDlm1) + pcNewDlm + ENTRY(19,pcList2,pcDlm2) WHEN iNumEntries >= 19
  4643. ENTRY((20 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(20,pcList1,pcDlm1) + pcNewDlm + ENTRY(20,pcList2,pcDlm2) WHEN iNumEntries >= 20
  4644. ENTRY((21 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(21,pcList1,pcDlm1) + pcNewDlm + ENTRY(21,pcList2,pcDlm2) WHEN iNumEntries >= 21
  4645. ENTRY((22 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(22,pcList1,pcDlm1) + pcNewDlm + ENTRY(22,pcList2,pcDlm2) WHEN iNumEntries >= 22
  4646. ENTRY((23 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(23,pcList1,pcDlm1) + pcNewDlm + ENTRY(23,pcList2,pcDlm2) WHEN iNumEntries >= 23
  4647. ENTRY((24 * 2) - 1,cMergelist,pcNewDlm) = ENTRY(24,pcList1,pcDlm1) + pcNewDlm + ENTRY(24,pcList2,pcDlm2) WHEN iNumEntries >= 24
  4648. .
  4649. DO iNum = 25 TO iNumEntries:
  4650. ENTRY((iNum * 2) - 1,cMergelist,pcNewDlm) = ENTRY(iNum,pcList1,pcDlm1) + pcNewDlm + ENTRY(iNum,pcList2,pcDlm2).
  4651. END.
  4652. RETURN cMergeList.
  4653. END FUNCTION.
  4654. /* _UIB-CODE-BLOCK-END */
  4655. &ANALYZE-RESUME
  4656. &ENDIF
  4657. &IF DEFINED(EXCLUDE-messageNumber) = 0 &THEN
  4658. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION messageNumber Procedure
  4659. FUNCTION messageNumber RETURNS CHARACTER
  4660. ( piMessage AS INTEGER ) :
  4661. /*------------------------------------------------------------------------------
  4662. Purpose: Returns a message text given a message number. Allows these
  4663. these messages to be translated and kept track of in one place
  4664. (src/adm2/admmsgs.i)
  4665. Params: INPUT piMessage AS INTEGER
  4666. Returns: CHARACTER: message text
  4667. ------------------------------------------------------------------------------*/
  4668. {src/adm2/admmsgs.i} /* Defines the array cADMMessages */
  4669. RETURN cADMMessages[piMessage].
  4670. END FUNCTION.
  4671. /* _UIB-CODE-BLOCK-END */
  4672. &ANALYZE-RESUME
  4673. &ENDIF
  4674. &IF DEFINED(EXCLUDE-modifyInactiveLinks) = 0 &THEN
  4675. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION modifyInactiveLinks Procedure
  4676. FUNCTION modifyInactiveLinks RETURNS LOGICAL
  4677. ( pcMode AS CHAR,
  4678. pcLinkType AS CHAR,
  4679. phObject AS HANDLE) :
  4680. /*------------------------------------------------------------------------------
  4681. Purpose: Modify the internal InactiveLinks property that is used to keep track
  4682. of inactivelinks for the object.
  4683. Parameters:
  4684. pcMode - 'ADD' - add to list
  4685. - 'REMOVE' - Remove from list
  4686. pcLinkType - LinkType f.ex 'DataSource'.
  4687. phObject - Object in other end of link
  4688. Notes: The property is stored as a comma-separated paired list where the
  4689. second entry of each pair is a semi-colon separated list of object
  4690. handles
  4691. - The isLinklnactive should be used to check if an actual link is
  4692. inactive
  4693. ------------------------------------------------------------------------------*/
  4694. DEFINE VARIABLE cLinks AS CHARACTER NO-UNDO.
  4695. DEFINE VARIABLE iPos AS INTEGER NO-UNDO.
  4696. DEFINE VARIABLE cHandles AS CHARACTER NO-UNDO.
  4697. DEFINE VARIABLE iHandle AS INTEGER NO-UNDO.
  4698. DEFINE VARIABLE cD1 AS CHARACTER NO-UNDO INIT ',':U.
  4699. DEFINE VARIABLE cD2 AS CHARACTER NO-UNDO INIT ';':U.
  4700. /* Ignore ANY dashes in linkname */
  4701. pcLinkType = REPLACE(pcLinkType,'-':U,'':U).
  4702. {get InactiveLinks cLinks}.
  4703. iPos = LOOKUP(pcLinkType,cLinks).
  4704. IF pcMode = 'ADD':U THEN
  4705. DO:
  4706. IF iPos = 0 THEN
  4707. ASSIGN
  4708. cLinks = cLinks
  4709. + (IF cLinks = '':U THEN '':U ELSE cD1)
  4710. + pcLinkType
  4711. + cD1
  4712. + STRING(phObject).
  4713. ELSE DO:
  4714. ASSIGN
  4715. cHandles = ENTRY(iPos + 1,cLinks)
  4716. cHandles = cHandles
  4717. + (IF cHandles = '':U THEN '':U ELSE cD2)
  4718. + STRING(phObject)
  4719. ENTRY(iPos + 1,cLinks) = cHandles.
  4720. END.
  4721. END.
  4722. ELSE IF pcMode = 'REMOVE':U AND iPos > 0 THEN
  4723. DO:
  4724. cHandles = ENTRY(iPos + 1,cLinks).
  4725. IF NUM-ENTRIES(cHandles,cD2) = 1 OR phObject = ? THEN
  4726. DO:
  4727. ENTRY(iPos,cLinks) = '':U.
  4728. ENTRY(iPos + 1,cLinks) = '':U.
  4729. cLinks = TRIM(REPLACE(cD1 + cLinks + cD1,cD1 + cD1,cD1),cD1).
  4730. END.
  4731. ELSE DO:
  4732. iHandle = LOOKUP(STRING(phObject),cHandles,cD2).
  4733. IF iHandle > 0 THEN
  4734. ASSIGN
  4735. ENTRY(iHandle,cHandles,cD2) = '':U
  4736. cHandles = TRIM(REPLACE(cD2 + cHandles + cD2,cD2 + cD2,cD2),cD2).
  4737. ENTRY(iPos + 1,cLinks) = cHandles.
  4738. END.
  4739. END.
  4740. {set InactiveLinks cLinks}.
  4741. RETURN TRUE.
  4742. END FUNCTION.
  4743. /* _UIB-CODE-BLOCK-END */
  4744. &ANALYZE-RESUME
  4745. &ENDIF
  4746. &IF DEFINED(EXCLUDE-propertyType) = 0 &THEN
  4747. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION propertyType Procedure
  4748. FUNCTION propertyType RETURNS CHARACTER
  4749. ( pcPropName AS CHARACTER ) :
  4750. /*------------------------------------------------------------------------------
  4751. Purpose: Locates the "set" property function for the specified property name
  4752. either locally or in a SUPER procedure, and returns its datatype.
  4753. Params: INPUT pcPropName AS CHARACTER -- Property name
  4754. Returns: CHARACTER: datatype of the property
  4755. ------------------------------------------------------------------------------*/
  4756. DEFINE VARIABLE hProc AS HANDLE NO-UNDO.
  4757. DEFINE VARIABLE i AS INTEGER NO-UNDO.
  4758. DEFINE VARIABLE cSetProp AS CHARACTER NO-UNDO.
  4759. DEFINE VARIABLE cSupers AS CHARACTER NO-UNDO.
  4760. DEFINE VARIABLE cSignature AS CHARACTER NO-UNDO.
  4761. DEFINE VARIABLE hSuper AS HANDLE NO-UNDO.
  4762. cSetProp = "set":U + pcPropName.
  4763. IF LOOKUP(cSetProp, TARGET-PROCEDURE:INTERNAL-ENTRIES) NE 0 THEN
  4764. hProc = TARGET-PROCEDURE.
  4765. ELSE DO:
  4766. cSupers = TARGET-PROCEDURE:SUPER-PROCEDURES.
  4767. /* Go in reverse so customizations is found first. The customization may have changed
  4768. the data type. For example link functions like getUpdateSource mneed to be changed to
  4769. support multiple objects. */
  4770. DO i = NUM-ENTRIES(cSupers) TO 1 BY -1:
  4771. hSuper = WIDGET-HANDLE(ENTRY(i, cSupers)).
  4772. IF LOOKUP(cSetProp, hSuper:INTERNAL-ENTRIES) NE 0 THEN
  4773. DO:
  4774. hProc = hSuper.
  4775. LEAVE.
  4776. END. /* END DO IF found the function. */
  4777. END. /* END DO i -- for each super procedure. */
  4778. END. /* END ELSE DO IF not found in the object's entries list. */
  4779. IF VALID-HANDLE(hProc) THEN
  4780. DO:
  4781. /* Signature should be "FUNCTION,LOGICAL, INPUT <param> <type>" */
  4782. cSignature = hProc:GET-SIGNATURE(cSetProp).
  4783. IF NUM-ENTRIES(cSignature) NE 3 OR
  4784. ENTRY(1, cSignature) NE "FUNCTION":U OR
  4785. ENTRY(2, cSignature) NE "LOGICAL":U THEN
  4786. RETURN ?.
  4787. ELSE DO:
  4788. cSignature = ENTRY(3, cSignature).
  4789. IF NUM-ENTRIES(cSignature, " ":U) NE 3 OR
  4790. ENTRY(1, cSignature, " ":U) NE "INPUT":U THEN
  4791. RETURN ?.
  4792. ELSE RETURN ENTRY(3, cSignature, " ":U).
  4793. END.
  4794. END.
  4795. ELSE RETURN ?.
  4796. END FUNCTION.
  4797. /* _UIB-CODE-BLOCK-END */
  4798. &ANALYZE-RESUME
  4799. &ENDIF
  4800. &IF DEFINED(EXCLUDE-reviewMessages) = 0 &THEN
  4801. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION reviewMessages Procedure
  4802. FUNCTION reviewMessages RETURNS CHARACTER
  4803. ( ) :
  4804. /*------------------------------------------------------------------------------
  4805. Purpose: Returns a delimited list of all messages, without removing
  4806. them from the log.
  4807. Params: <none>
  4808. Returns: CHARACTER: The message list is delimited by CHR(3); within each
  4809. message, the message text, the Field (if any), and the Table
  4810. (if any) are delimited by CHR(4).
  4811. Notes: Use the similar function fetchMessages to read messages
  4812. and delete them from the log, which is the norm.
  4813. ------------------------------------------------------------------------------*/
  4814. RETURN gcDataMessages.
  4815. END FUNCTION.
  4816. /* _UIB-CODE-BLOCK-END */
  4817. &ANALYZE-RESUME
  4818. &ENDIF
  4819. &IF DEFINED(EXCLUDE-setChildDataKey) = 0 &THEN
  4820. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setChildDataKey Procedure
  4821. FUNCTION setChildDataKey RETURNS LOGICAL
  4822. ( cChildDataKey AS CHARACTER) :
  4823. /*------------------------------------------------------------------------------
  4824. Purpose:
  4825. Notes:
  4826. ------------------------------------------------------------------------------*/
  4827. {set ChildDataKey cChildDataKey}.
  4828. RETURN TRUE.
  4829. END FUNCTION.
  4830. /* _UIB-CODE-BLOCK-END */
  4831. &ANALYZE-RESUME
  4832. &ENDIF
  4833. &IF DEFINED(EXCLUDE-setClassName) = 0 &THEN
  4834. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setClassName Procedure
  4835. FUNCTION setClassName RETURNS LOGICAL
  4836. ( INPUT pcClassName AS CHARACTER ):
  4837. /*------------------------------------------------------------------------------
  4838. Purpose: Sets the value of the Repository class name
  4839. Notes: * This should only be done by the Repository retrieval.
  4840. ------------------------------------------------------------------------------*/
  4841. &SCOPED-DEFINE xpClassName
  4842. {set ClassName pcClassName}.
  4843. &UNDEFINE xpClassName
  4844. RETURN TRUE.
  4845. END FUNCTION. /* setClassName */
  4846. /* _UIB-CODE-BLOCK-END */
  4847. &ANALYZE-RESUME
  4848. &ENDIF
  4849. &IF DEFINED(EXCLUDE-setContainerHidden) = 0 &THEN
  4850. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setContainerHidden Procedure
  4851. FUNCTION setContainerHidden RETURNS LOGICAL
  4852. ( plHidden AS LOGICAL ) :
  4853. /*------------------------------------------------------------------------------
  4854. Purpose: Sets the ContainerHidden property, indicating that this object's
  4855. SmartContainer (SmartWindow, SmartFrame...) has been hidden.
  4856. Params: plHidden AS LOGICAL.
  4857. Returns: LOGICAL (true)
  4858. Notes: This is called from the containers hide- and viewObject.
  4859. A publish of linkState will be done if the object has a datasource
  4860. outside the container in order to deactivate datalinks from outside
  4861. objects on hide of the container and activate datalinks again on
  4862. view of the container.
  4863. ------------------------------------------------------------------------------*/
  4864. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  4865. DEFINE VARIABLE hDataSource AS HANDLE NO-UNDO.
  4866. DEFINE VARIABLE hDataContSource AS HANDLE NO-UNDO.
  4867. &SCOPED-DEFINE xp-assign
  4868. {get ContainerSource hContainerSource}
  4869. {get DataSource hDataSource}
  4870. {set ContainerHidden plHidden}
  4871. .
  4872. &UNDEFINE xp-assign
  4873. IF VALID-HANDLE(hDataSource) AND VALID-HANDLE(hContainerSource) THEN
  4874. DO:
  4875. /* If our datasource is in another container we publish the fact that
  4876. the object is active/inactive so that links can be disabled/enabled
  4877. accordingly. (This is also done as part of hide/view, but when the
  4878. container is hidden hideObject and viewObject is not done */
  4879. {get ContainerSource hDataContSource hDataSource}.
  4880. IF VALID-HANDLE(hDataContSource)
  4881. AND hDataContSource <> hContainerSource THEN
  4882. PUBLISH 'LinkState':U FROM TARGET-PROCEDURE (IF plHidden THEN 'inactive':U
  4883. ELSE 'active').
  4884. END.
  4885. RETURN TRUE.
  4886. END FUNCTION.
  4887. /* _UIB-CODE-BLOCK-END */
  4888. &ANALYZE-RESUME
  4889. &ENDIF
  4890. &IF DEFINED(EXCLUDE-setContainerSource) = 0 &THEN
  4891. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setContainerSource Procedure
  4892. FUNCTION setContainerSource RETURNS LOGICAL
  4893. ( phObject AS HANDLE ) :
  4894. /*------------------------------------------------------------------------------
  4895. Purpose: Sets the ContainerSource link value.
  4896. Params: INPUT phObject AS HANDLE -- procedure handle of the object
  4897. which should become the Container-Source
  4898. Returns: LOGICAL (true)
  4899. ------------------------------------------------------------------------------*/
  4900. /* This should be run only from add/removeLink and modifyListProperty.
  4901. It's needed because the callers get a variable link name for which
  4902. {set} can't be used. */
  4903. {set ContainerSource phObject}.
  4904. RETURN TRUE.
  4905. END FUNCTION.
  4906. /* _UIB-CODE-BLOCK-END */
  4907. &ANALYZE-RESUME
  4908. &ENDIF
  4909. &IF DEFINED(EXCLUDE-setContainerSourceEvents) = 0 &THEN
  4910. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setContainerSourceEvents Procedure
  4911. FUNCTION setContainerSourceEvents RETURNS LOGICAL
  4912. ( pcEvents AS CHAR ) :
  4913. /*------------------------------------------------------------------------------
  4914. Purpose: Stores a comma-separated list of the events this object
  4915. wants to subscribe to in its ContainerSource
  4916. Params: pcEvents - List of events
  4917. Returns: CHARACTER
  4918. ------------------------------------------------------------------------------*/
  4919. {set ContainerSourceEvents pcEvents}.
  4920. RETURN TRUE.
  4921. END FUNCTION.
  4922. /* _UIB-CODE-BLOCK-END */
  4923. &ANALYZE-RESUME
  4924. &ENDIF
  4925. &IF DEFINED(EXCLUDE-setDataLinksEnabled) = 0 &THEN
  4926. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataLinksEnabled Procedure
  4927. FUNCTION setDataLinksEnabled RETURNS LOGICAL
  4928. ( lDataLinksEnabled AS LOGICAL ) :
  4929. /*------------------------------------------------------------------------------
  4930. Purpose:
  4931. Notes: DEPRECATED
  4932. ------------------------------------------------------------------------------*/
  4933. {set DataLinksEnabled lDataLinksEnabled}.
  4934. RETURN TRUE.
  4935. END FUNCTION.
  4936. /* _UIB-CODE-BLOCK-END */
  4937. &ANALYZE-RESUME
  4938. &ENDIF
  4939. &IF DEFINED(EXCLUDE-setDataSource) = 0 &THEN
  4940. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataSource Procedure
  4941. FUNCTION setDataSource RETURNS LOGICAL
  4942. ( phObject AS HANDLE ) :
  4943. /*------------------------------------------------------------------------------
  4944. Purpose: Sets the DataSource link value.
  4945. Params: phObject AS HANDLE -- Procedure handle of
  4946. the object which should be made this object's Data-Source
  4947. Returns: LOGICAL (true)
  4948. Notes: There iS no xp preprosessor in order to allow design-time override
  4949. of getDataSource
  4950. ------------------------------------------------------------------------------*/
  4951. &SCOPED-DEFINE xpDataSource
  4952. {set DataSource phObject}.
  4953. &UNDEFINE xpDataSource
  4954. RETURN TRUE.
  4955. END FUNCTION.
  4956. /* _UIB-CODE-BLOCK-END */
  4957. &ANALYZE-RESUME
  4958. &ENDIF
  4959. &IF DEFINED(EXCLUDE-setDataSourceEvents) = 0 &THEN
  4960. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataSourceEvents Procedure
  4961. FUNCTION setDataSourceEvents RETURNS LOGICAL
  4962. ( pcEventsList AS CHARACTER ) :
  4963. /*------------------------------------------------------------------------------
  4964. Purpose: Modifies the list of DataSourceEvents.
  4965. Params: pcEventsList AS CHARACTER -- comma-separated list of events.
  4966. Returns: LOGICAL (true)
  4967. Notes: Because this is a comma-separated list, it should normally be
  4968. invoked indirectly, through modifyListProperty.
  4969. ------------------------------------------------------------------------------*/
  4970. {set DataSourceEvents pcEventsList}.
  4971. RETURN TRUE.
  4972. END FUNCTION.
  4973. /* _UIB-CODE-BLOCK-END */
  4974. &ANALYZE-RESUME
  4975. &ENDIF
  4976. &IF DEFINED(EXCLUDE-setDataSourceNames) = 0 &THEN
  4977. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataSourceNames Procedure
  4978. FUNCTION setDataSourceNames RETURNS LOGICAL
  4979. ( pcSourceNames AS CHAR ) :
  4980. /*------------------------------------------------------------------------------
  4981. Purpose: Stores the ObjectName of the Data Object that sends data to this
  4982. visual object. This would be set if the data-Source is an SBO
  4983. or other Container with DataObjects.
  4984. Params: pcSourceNames
  4985. Notes: Used both by visual objects and SDOs.
  4986. See the SBOs addDataTarget for more details on how this is set.
  4987. ------------------------------------------------------------------------------*/
  4988. {set DataSourceNames pcSourceNames}.
  4989. RETURN TRUE.
  4990. END FUNCTION.
  4991. /* _UIB-CODE-BLOCK-END */
  4992. &ANALYZE-RESUME
  4993. &ENDIF
  4994. &IF DEFINED(EXCLUDE-setDataTarget) = 0 &THEN
  4995. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataTarget Procedure
  4996. FUNCTION setDataTarget RETURNS LOGICAL
  4997. ( pcTarget AS CHARACTER ) :
  4998. /*------------------------------------------------------------------------------
  4999. Purpose: Sets the DataTarget object handle, normally for pass-through
  5000. support.
  5001. Params: pcTarget AS CHARACTER -- DataTarget procedure handle.
  5002. Notes: Because this can be a list, it should normally be changed using
  5003. modifyListProperty.
  5004. ------------------------------------------------------------------------------*/
  5005. {set DataTarget pcTarget}.
  5006. RETURN TRUE.
  5007. END FUNCTION.
  5008. /* _UIB-CODE-BLOCK-END */
  5009. &ANALYZE-RESUME
  5010. &ENDIF
  5011. &IF DEFINED(EXCLUDE-setDataTargetEvents) = 0 &THEN
  5012. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDataTargetEvents Procedure
  5013. FUNCTION setDataTargetEvents RETURNS LOGICAL
  5014. ( pcEvents AS CHARACTER ) :
  5015. /*------------------------------------------------------------------------------
  5016. Purpose: Resets the list of events this object subscribes to in its
  5017. DataTarget.
  5018. Parameters:
  5019. pcEvents - A comma-separated list of events to subscribe to.
  5020. Notes: Normally modifyListProperty should be used to ADD or REMOVE
  5021. events from this list.
  5022. ------------------------------------------------------------------------------*/
  5023. {set DataTargetEvents pcEvents}.
  5024. RETURN TRUE.
  5025. END FUNCTION.
  5026. /* _UIB-CODE-BLOCK-END */
  5027. &ANALYZE-RESUME
  5028. &ENDIF
  5029. &IF DEFINED(EXCLUDE-setDBAware) = 0 &THEN
  5030. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDBAware Procedure
  5031. FUNCTION setDBAware RETURNS LOGICAL
  5032. ( lAware AS LOGICAL ) :
  5033. /*------------------------------------------------------------------------------
  5034. Purpose: Sets a flag indicating whether this object is sensitive to being
  5035. connected to a database or not.
  5036. Params: lAware AS LOGICAL
  5037. Returns: LOGICAL (true)
  5038. ------------------------------------------------------------------------------*/
  5039. {set DBAware lAware}.
  5040. RETURN TRUE.
  5041. END FUNCTION.
  5042. /* _UIB-CODE-BLOCK-END */
  5043. &ANALYZE-RESUME
  5044. &ENDIF
  5045. &IF DEFINED(EXCLUDE-setDesignDataObject) = 0 &THEN
  5046. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDesignDataObject Procedure
  5047. FUNCTION setDesignDataObject RETURNS LOGICAL
  5048. ( pcDataObject AS CHARACTER ) :
  5049. /*------------------------------------------------------------------------------
  5050. Purpose: Stores the name of the design-time dataobject.
  5051. Params: pcDataObject AS CHARACTER -- name of the dataobject
  5052. Notes:
  5053. ------------------------------------------------------------------------------*/
  5054. {set DesignDataObject pcDataObject}.
  5055. RETURN TRUE.
  5056. END FUNCTION.
  5057. /* _UIB-CODE-BLOCK-END */
  5058. &ANALYZE-RESUME
  5059. &ENDIF
  5060. &IF DEFINED(EXCLUDE-setDynamicObject) = 0 &THEN
  5061. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDynamicObject Procedure
  5062. FUNCTION setDynamicObject RETURNS LOGICAL
  5063. ( lTemp AS LOGICAL ) :
  5064. /*------------------------------------------------------------------------------
  5065. Purpose:
  5066. Notes:
  5067. ------------------------------------------------------------------------------*/
  5068. {set DynamicObject lTemp}.
  5069. RETURN TRUE. /* Function return value. */
  5070. END FUNCTION.
  5071. /* _UIB-CODE-BLOCK-END */
  5072. &ANALYZE-RESUME
  5073. &ENDIF
  5074. &IF DEFINED(EXCLUDE-setHideOnInit) = 0 &THEN
  5075. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setHideOnInit Procedure
  5076. FUNCTION setHideOnInit RETURNS LOGICAL
  5077. ( plHideOnInit AS LOGICAL ) :
  5078. /*------------------------------------------------------------------------------
  5079. Purpose: Set the flag that indicates whether to visualize
  5080. at initialization.
  5081. Parameters: plHideOnInit - logical
  5082. Notes: Also used for non visual object in order to publish LinkState
  5083. correctly for activation and deactivation of links.
  5084. ------------------------------------------------------------------------------*/
  5085. &scop xpHideOnInit
  5086. {set HideOnInit plHideOnInit}.
  5087. &undefine xpHideOnInit
  5088. RETURN TRUE.
  5089. END FUNCTION.
  5090. /* _UIB-CODE-BLOCK-END */
  5091. &ANALYZE-RESUME
  5092. &ENDIF
  5093. &IF DEFINED(EXCLUDE-setInactiveLinks) = 0 &THEN
  5094. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setInactiveLinks Procedure
  5095. FUNCTION setInactiveLinks RETURNS LOGICAL
  5096. ( pcInactiveLinks AS CHARACTER ) :
  5097. /*------------------------------------------------------------------------------
  5098. Purpose: Retunrs the inactive links
  5099. Notes: Stored as a comma-separated paired list where the second entry of
  5100. each pair is a semi-colon separated list of object handles
  5101. - modifyInactiveLinks should be used to maintain thje property.
  5102. - isLinklnactive should be used to check if an actual link is
  5103. inactive
  5104. ------------------------------------------------------------------------------*/
  5105. {set InactiveLinks pcInactiveLinks}.
  5106. RETURN TRUE.
  5107. END FUNCTION.
  5108. /* _UIB-CODE-BLOCK-END */
  5109. &ANALYZE-RESUME
  5110. &ENDIF
  5111. &IF DEFINED(EXCLUDE-setInstanceId) = 0 &THEN
  5112. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setInstanceId Procedure
  5113. FUNCTION setInstanceId RETURNS LOGICAL
  5114. ( pdInstanceId AS DECIMAL ) :
  5115. /*------------------------------------------------------------------------------
  5116. Purpose: This is the Repository manager's unique identifier of this instance
  5117. Notes: This should never need to be set.. except by the Repository Manager,
  5118. which doesn't use this function...
  5119. ------------------------------------------------------------------------------*/
  5120. {set InstanceId pdInstanceId}.
  5121. RETURN TRUE.
  5122. END FUNCTION.
  5123. /* _UIB-CODE-BLOCK-END */
  5124. &ANALYZE-RESUME
  5125. &ENDIF
  5126. &IF DEFINED(EXCLUDE-setInstanceProperties) = 0 &THEN
  5127. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setInstanceProperties Procedure
  5128. FUNCTION setInstanceProperties RETURNS LOGICAL
  5129. ( pcPropList AS CHARACTER ) :
  5130. /*------------------------------------------------------------------------------
  5131. Purpose: Sets the list of instance properties.
  5132. Params: pcPropList AS CHARACTER -- modified list of InstanceProperties
  5133. Returns: LOGICAL (true)
  5134. Notes: Because this is a comma-separated list, it should normally be
  5135. invoked indirectly, through modifyListAttribute.
  5136. ------------------------------------------------------------------------------*/
  5137. {set InstanceProperties pcPropList}.
  5138. RETURN TRUE.
  5139. END FUNCTION.
  5140. /* _UIB-CODE-BLOCK-END */
  5141. &ANALYZE-RESUME
  5142. &ENDIF
  5143. &IF DEFINED(EXCLUDE-setLabel) = 0 &THEN
  5144. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setLabel Procedure
  5145. FUNCTION setLabel RETURNS LOGICAL
  5146. (pcLabel AS CHARACTER) :
  5147. /*------------------------------------------------------------------------------
  5148. Purpose: Stores the LABEL defined for the selection
  5149. Parameters: INPUT pcLabel - char
  5150. ------------------------------------------------------------------------------*/
  5151. &SCOPED-DEFINE xpLabel
  5152. {set Label pcLabel}.
  5153. &UNDEFINE xpLabel
  5154. RETURN TRUE.
  5155. END FUNCTION.
  5156. /* _UIB-CODE-BLOCK-END */
  5157. &ANALYZE-RESUME
  5158. &ENDIF
  5159. &IF DEFINED(EXCLUDE-setLayoutPosition) = 0 &THEN
  5160. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setLayoutPosition Procedure
  5161. FUNCTION setLayoutPosition RETURNS LOGICAL
  5162. ( INPUT pcLayoutPosition AS CHARACTER ):
  5163. /*------------------------------------------------------------------------------
  5164. Purpose:
  5165. Notes:
  5166. ------------------------------------------------------------------------------*/
  5167. {set LayoutPosition pcLayoutPosition}.
  5168. RETURN TRUE.
  5169. END FUNCTION. /* setLayoutPosition */
  5170. /* _UIB-CODE-BLOCK-END */
  5171. &ANALYZE-RESUME
  5172. &ENDIF
  5173. &IF DEFINED(EXCLUDE-setLogicalObjectName) = 0 &THEN
  5174. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setLogicalObjectName Procedure
  5175. FUNCTION setLogicalObjectName RETURNS LOGICAL
  5176. ( cName AS CHARACTER ) :
  5177. /*------------------------------------------------------------------------------
  5178. Purpose: Set the LogicalObjectName
  5179. Notes: This is the unique name of the object master in the repository
  5180. ------------------------------------------------------------------------------*/
  5181. {set LogicalObjectName cName}.
  5182. RETURN TRUE. /* Function return value. */
  5183. END FUNCTION.
  5184. /* _UIB-CODE-BLOCK-END */
  5185. &ANALYZE-RESUME
  5186. &ENDIF
  5187. &IF DEFINED(EXCLUDE-setLogicalVersion) = 0 &THEN
  5188. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setLogicalVersion Procedure
  5189. FUNCTION setLogicalVersion RETURNS LOGICAL
  5190. ( cVersion AS CHARACTER ) :
  5191. /*------------------------------------------------------------------------------
  5192. Purpose:
  5193. Notes:
  5194. ------------------------------------------------------------------------------*/
  5195. &SCOPED-DEFINE xpLogicalVersion
  5196. {set LogicalVersion cVersion}.
  5197. &UNDEFINE xpLogicalVersion
  5198. RETURN TRUE. /* Function return value. */
  5199. END FUNCTION.
  5200. /* _UIB-CODE-BLOCK-END */
  5201. &ANALYZE-RESUME
  5202. &ENDIF
  5203. &IF DEFINED(EXCLUDE-setManageReadErrors) = 0 &THEN
  5204. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setManageReadErrors Procedure
  5205. FUNCTION setManageReadErrors RETURNS LOGICAL
  5206. (plManageReadErrors AS LOGICAL ) :
  5207. /*------------------------------------------------------------------------------
  5208. Purpose: Session property that tells if adm error mechanism is used on data
  5209. retrieval.
  5210. Notes: This should only be set to true if one is absolutely sure that the
  5211. messages are emptied from the message queue when the request is
  5212. completed. ( stored in a variable in smart - see fetchMessages,
  5213. addMessage and anyMessage)
  5214. - Used on server by some adm2 data request procedures - fetch*
  5215. - Set to false in fetchMessages
  5216. ------------------------------------------------------------------------------*/
  5217. glManageReadErrors = plManageReadErrors.
  5218. RETURN TRUE.
  5219. END FUNCTION.
  5220. /* _UIB-CODE-BLOCK-END */
  5221. &ANALYZE-RESUME
  5222. &ENDIF
  5223. &IF DEFINED(EXCLUDE-setMessageBoxType) = 0 &THEN
  5224. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setMessageBoxType Procedure
  5225. FUNCTION setMessageBoxType RETURNS LOGICAL
  5226. ( input pcMessageBoxType as character ):
  5227. /*------------------------------------------------------------------------------
  5228. Purpose:
  5229. Notes:
  5230. ------------------------------------------------------------------------------*/
  5231. gcMessageBoxType = pcMessageBoxType.
  5232. error-status:error = no.
  5233. return true.
  5234. END FUNCTION.
  5235. /* _UIB-CODE-BLOCK-END */
  5236. &ANALYZE-RESUME
  5237. &ENDIF
  5238. &IF DEFINED(EXCLUDE-setObjectHidden) = 0 &THEN
  5239. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setObjectHidden Procedure
  5240. FUNCTION setObjectHidden RETURNS LOGICAL
  5241. ( plHidden AS LOGICAL ) :
  5242. /*------------------------------------------------------------------------------
  5243. Purpose: sets the Object Hidden property
  5244. Params: lHidden AS LOGICAL
  5245. ------------------------------------------------------------------------------*/
  5246. &SCOPED-DEFINE xpObjectHidden
  5247. {set ObjectHidden plHidden}.
  5248. &UNDEFINE xpObjectHidden
  5249. RETURN TRUE.
  5250. END FUNCTION.
  5251. /* _UIB-CODE-BLOCK-END */
  5252. &ANALYZE-RESUME
  5253. &ENDIF
  5254. &IF DEFINED(EXCLUDE-setObjectName) = 0 &THEN
  5255. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setObjectName Procedure
  5256. FUNCTION setObjectName RETURNS LOGICAL
  5257. ( pcName AS CHARACTER ) :
  5258. /*------------------------------------------------------------------------------
  5259. Purpose: sets the ObjectName property of the dynamic SDO.
  5260. Params: cName AS CHAR
  5261. Notes: The default name of a SmartObject is its simple file name
  5262. (not including the _cl proxy suffix in the case of AppServer
  5263. objects). This function can be used to reset it when needed.
  5264. ------------------------------------------------------------------------------*/
  5265. {set ObjectName pcName}.
  5266. RETURN TRUE.
  5267. END FUNCTION.
  5268. /* _UIB-CODE-BLOCK-END */
  5269. &ANALYZE-RESUME
  5270. &ENDIF
  5271. &IF DEFINED(EXCLUDE-setObjectParent) = 0 &THEN
  5272. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setObjectParent Procedure
  5273. FUNCTION setObjectParent RETURNS LOGICAL
  5274. ( phParent AS HANDLE ) :
  5275. /*------------------------------------------------------------------------------
  5276. Purpose: Sets the property ObjectParent, the widget handle of this
  5277. SmartObject's Container-Source's Frame or Window.
  5278. Params: INPUT phParent AS HANDLE -- Frame or Window handle.
  5279. Returns: LOGICAL: true if assign succeeds; false if parent handle param or
  5280. ContainerHandle property is not a valid handle.
  5281. ------------------------------------------------------------------------------*/
  5282. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  5283. {get ContainerHandle hObject}.
  5284. IF VALID-HANDLE(hObject) AND VALID-HANDLE(phParent) THEN
  5285. DO:
  5286. IF CAN-DO( "DIALOG-BOX,FRAME":U, phParent:TYPE) THEN
  5287. DO:
  5288. IF CAN-SET(hObject, "FRAME":U) THEN
  5289. ASSIGN hObject:FRAME = phParent.
  5290. END. /* Dialogue box or frame */
  5291. ELSE ASSIGN hObject:PARENT = phParent.
  5292. RETURN TRUE.
  5293. END.
  5294. ELSE RETURN FALSE.
  5295. END FUNCTION.
  5296. /* _UIB-CODE-BLOCK-END */
  5297. &ANALYZE-RESUME
  5298. &ENDIF
  5299. &IF DEFINED(EXCLUDE-setObjectsCreated) = 0 &THEN
  5300. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setObjectsCreated Procedure
  5301. FUNCTION setObjectsCreated RETURNS LOGICAL
  5302. ( plCreated AS LOGICAL ) :
  5303. /*------------------------------------------------------------------------------
  5304. Purpose: Returns a flag indicating whether this object has run createObjects
  5305. for page 0.
  5306. Params: <none>
  5307. Notes: Some containers run createObjects from the main block while others
  5308. start them from initializeObject. The create initializeObject is
  5309. often too late so this flag was introduced to allow us to have more
  5310. control over when the objects are created and run createObjects
  5311. before initializeObject for all objects
  5312. ----------------------------------------------------------------------------*/
  5313. {set ObjectsCreated plCreated}.
  5314. RETURN TRUE.
  5315. END FUNCTION.
  5316. /* _UIB-CODE-BLOCK-END */
  5317. &ANALYZE-RESUME
  5318. &ENDIF
  5319. &IF DEFINED(EXCLUDE-setObjectVersion) = 0 &THEN
  5320. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setObjectVersion Procedure
  5321. FUNCTION setObjectVersion RETURNS LOGICAL
  5322. ( cObjectVersion AS CHARACTER ) :
  5323. /*------------------------------------------------------------------------------
  5324. Purpose:
  5325. Notes:
  5326. ------------------------------------------------------------------------------*/
  5327. {set ObjectVersion cObjectVersion}.
  5328. RETURN TRUE.
  5329. END FUNCTION.
  5330. /* _UIB-CODE-BLOCK-END */
  5331. &ANALYZE-RESUME
  5332. &ENDIF
  5333. &IF DEFINED(EXCLUDE-setParentDataKey) = 0 &THEN
  5334. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setParentDataKey Procedure
  5335. FUNCTION setParentDataKey RETURNS LOGICAL
  5336. ( cParentDataKey AS CHARACTER) :
  5337. /*------------------------------------------------------------------------------
  5338. Purpose:
  5339. Notes:
  5340. ------------------------------------------------------------------------------*/
  5341. {set ParentDataKey cParentDataKey}.
  5342. RETURN TRUE.
  5343. END FUNCTION.
  5344. /* _UIB-CODE-BLOCK-END */
  5345. &ANALYZE-RESUME
  5346. &ENDIF
  5347. &IF DEFINED(EXCLUDE-setPassThroughLinks) = 0 &THEN
  5348. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setPassThroughLinks Procedure
  5349. FUNCTION setPassThroughLinks RETURNS LOGICAL
  5350. ( pcLinks AS CHARACTER ) :
  5351. /*------------------------------------------------------------------------------
  5352. Purpose: Sets the variable which stores links which can be passed through
  5353. Params: pcLinks AS CHARACTER -- comma-separated list of links.
  5354. Each link actually consists of <linkname>;single/multiple,
  5355. where single means only one target is supported, so the original
  5356. link to the container should be deleted when the links are combined.
  5357. Returns: LOGICAL (true)
  5358. Notes: This property is shared by all objects. Because it is a list,
  5359. it should normally be modified using modifyListProperty.
  5360. ------------------------------------------------------------------------------*/
  5361. scPassThroughLinks = pcLinks.
  5362. RETURN TRUE.
  5363. END FUNCTION.
  5364. /* _UIB-CODE-BLOCK-END */
  5365. &ANALYZE-RESUME
  5366. &ENDIF
  5367. &IF DEFINED(EXCLUDE-setPhysicalObjectName) = 0 &THEN
  5368. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setPhysicalObjectName Procedure
  5369. FUNCTION setPhysicalObjectName RETURNS LOGICAL
  5370. ( cTemp AS CHARACTER ) :
  5371. /*------------------------------------------------------------------------------
  5372. Purpose:
  5373. Notes:
  5374. ------------------------------------------------------------------------------*/
  5375. {set PhysicalObjectName cTemp}.
  5376. RETURN TRUE. /* Function return value. */
  5377. END FUNCTION.
  5378. /* _UIB-CODE-BLOCK-END */
  5379. &ANALYZE-RESUME
  5380. &ENDIF
  5381. &IF DEFINED(EXCLUDE-setPhysicalVersion) = 0 &THEN
  5382. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setPhysicalVersion Procedure
  5383. FUNCTION setPhysicalVersion RETURNS LOGICAL
  5384. ( cVersion AS CHARACTER ) :
  5385. /*------------------------------------------------------------------------------
  5386. Purpose:
  5387. Notes:
  5388. ------------------------------------------------------------------------------*/
  5389. {set PhysicalVersion cVersion}.
  5390. RETURN TRUE. /* Function return value. */
  5391. END FUNCTION.
  5392. /* _UIB-CODE-BLOCK-END */
  5393. &ANALYZE-RESUME
  5394. &ENDIF
  5395. &IF DEFINED(EXCLUDE-setRenderingProcedure) = 0 &THEN
  5396. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setRenderingProcedure Procedure
  5397. FUNCTION setRenderingProcedure RETURNS LOGICAL
  5398. ( cProcedure AS CHARACTER ) :
  5399. /*------------------------------------------------------------------------------
  5400. Purpose: Set the RenderingProcedure
  5401. Notes:
  5402. ------------------------------------------------------------------------------*/
  5403. {set RenderingProcedure cProcedure}.
  5404. RETURN TRUE. /* Function return value. */
  5405. END FUNCTION.
  5406. /* _UIB-CODE-BLOCK-END */
  5407. &ANALYZE-RESUME
  5408. &ENDIF
  5409. &IF DEFINED(EXCLUDE-setRunAttribute) = 0 &THEN
  5410. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setRunAttribute Procedure
  5411. FUNCTION setRunAttribute RETURNS LOGICAL
  5412. ( cRunAttribute AS CHARACTER ) :
  5413. /*------------------------------------------------------------------------------
  5414. Purpose:
  5415. Notes:
  5416. ------------------------------------------------------------------------------*/
  5417. {set RunAttribute cRunAttribute}.
  5418. RETURN TRUE. /* Function return value. */
  5419. END FUNCTION.
  5420. /* _UIB-CODE-BLOCK-END */
  5421. &ANALYZE-RESUME
  5422. &ENDIF
  5423. &IF DEFINED(EXCLUDE-setSuperProcedure) = 0 &THEN
  5424. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setSuperProcedure Procedure
  5425. FUNCTION setSuperProcedure RETURNS LOGICAL
  5426. ( INPUT pcSuperProcedure AS CHARACTER ):
  5427. /*------------------------------------------------------------------------------
  5428. Purpose:
  5429. Notes: * The super procedure handle can be a comma-separate value list.
  5430. ------------------------------------------------------------------------------*/
  5431. &SCOPED-DEFINE xpSuperProcedure
  5432. {set SuperProcedure pcSuperProcedure}.
  5433. &UNDEFINE xpSuperProcedure
  5434. RETURN TRUE.
  5435. END FUNCTION. /* setSuperProcedure */
  5436. /* _UIB-CODE-BLOCK-END */
  5437. &ANALYZE-RESUME
  5438. &ENDIF
  5439. &IF DEFINED(EXCLUDE-setSuperProcedureHandle) = 0 &THEN
  5440. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setSuperProcedureHandle Procedure
  5441. FUNCTION setSuperProcedureHandle RETURNS LOGICAL
  5442. ( INPUT pcProcedureHandle AS CHARACTER ):
  5443. /*------------------------------------------------------------------------------
  5444. Purpose:
  5445. Notes: * The super procedure handle can be a comma-separate value list.
  5446. ------------------------------------------------------------------------------*/
  5447. &SCOPED-DEFINE xpSuperProcedureHandle
  5448. {set SuperProcedureHandle pcProcedureHandle}.
  5449. &UNDEFINE xpSuperProcedureHandle
  5450. RETURN TRUE.
  5451. END FUNCTION. /* setSuperProcedureHandle */
  5452. /* _UIB-CODE-BLOCK-END */
  5453. &ANALYZE-RESUME
  5454. &ENDIF
  5455. &IF DEFINED(EXCLUDE-setSuperProcedureMode) = 0 &THEN
  5456. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setSuperProcedureMode Procedure
  5457. FUNCTION setSuperProcedureMode RETURNS LOGICAL
  5458. ( INPUT pcProcedureMode AS CHARACTER ):
  5459. /*------------------------------------------------------------------------------
  5460. Purpose:
  5461. Notes:
  5462. ------------------------------------------------------------------------------*/
  5463. &SCOPED-DEFINE xpSuperProcedureMode
  5464. {set SuperProcedureMode pcProcedureMode}.
  5465. &UNDEFINE xpSuperProcedureMode
  5466. RETURN TRUE.
  5467. END FUNCTION. /* setSuperProcedureMode */
  5468. /* _UIB-CODE-BLOCK-END */
  5469. &ANALYZE-RESUME
  5470. &ENDIF
  5471. &IF DEFINED(EXCLUDE-setSupportedLinks) = 0 &THEN
  5472. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setSupportedLinks Procedure
  5473. FUNCTION setSupportedLinks RETURNS LOGICAL
  5474. ( pcLinkList AS CHARACTER ) :
  5475. /*------------------------------------------------------------------------------
  5476. Purpose: Modifies the list of SupportedLinks.
  5477. Params: pcLinkList AS CHARACTER -- comma-separated list of links.
  5478. Returns: LOGICAL (true)
  5479. Notes: Because this is a comma-separated list, it should normally be
  5480. invoked indirectly, through modifyListProperty.
  5481. ------------------------------------------------------------------------------*/
  5482. IF pcLinkList = '':U THEN
  5483. RETURN FALSE.
  5484. {set SupportedLinks pcLinkList}.
  5485. RETURN TRUE.
  5486. END FUNCTION.
  5487. /* _UIB-CODE-BLOCK-END */
  5488. &ANALYZE-RESUME
  5489. &ENDIF
  5490. &IF DEFINED(EXCLUDE-setThinRenderingProcedure) = 0 &THEN
  5491. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setThinRenderingProcedure Procedure
  5492. FUNCTION setThinRenderingProcedure RETURNS LOGICAL
  5493. ( cProcedure AS CHARACTER ) :
  5494. /*------------------------------------------------------------------------------
  5495. Purpose: Set the ThinRenderingProcedure
  5496. Notes:
  5497. ------------------------------------------------------------------------------*/
  5498. {set ThinRenderingProcedure cProcedure}.
  5499. RETURN TRUE. /* Function return value. */
  5500. END FUNCTION.
  5501. /* _UIB-CODE-BLOCK-END */
  5502. &ANALYZE-RESUME
  5503. &ENDIF
  5504. &IF DEFINED(EXCLUDE-setTranslatableProperties) = 0 &THEN
  5505. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTranslatableProperties Procedure
  5506. FUNCTION setTranslatableProperties RETURNS LOGICAL
  5507. ( pcPropList AS CHARACTER ) :
  5508. /*------------------------------------------------------------------------------
  5509. Purpose: Sets the list of translatable properties, those which should
  5510. not have a ":U" following their literal values when code is
  5511. generated in adm-create-objects.
  5512. Params: pcPropList AS CHARACTER -- comma-separated list of properties.
  5513. Returns: LOGICAL (true)
  5514. Notes: Because this is a comma-separated list, it should normally be
  5515. invoked indirectly, through modifyListAttribute.
  5516. ------------------------------------------------------------------------------*/
  5517. {set TranslatableProperties pcPropList}.
  5518. RETURN TRUE.
  5519. END FUNCTION.
  5520. /* _UIB-CODE-BLOCK-END */
  5521. &ANALYZE-RESUME
  5522. &ENDIF
  5523. &IF DEFINED(EXCLUDE-setUIBMode) = 0 &THEN
  5524. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setUIBMode Procedure
  5525. FUNCTION setUIBMode RETURNS LOGICAL
  5526. ( pcMode AS CHARACTER ) :
  5527. /*------------------------------------------------------------------------------
  5528. Purpose: Sets the UIBMode property of the object.
  5529. Params: INPUT pcMode AS CHARACTER -- blank or "Design" are normal values.
  5530. Returns: LOGICAL (true)
  5531. Notes: In addition to setting the property, this property function
  5532. runs an AppBuilder procedure which sets up the object for use
  5533. in a design window, making it Movable, etc.
  5534. For performance reasons, UIBMode has been made an xp property.
  5535. If you need to set it, make sure this function is invoked explicitly.
  5536. Don't {set UIBMode...}
  5537. ------------------------------------------------------------------------------*/
  5538. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  5539. DEFINE VARIABLE iTarget AS INTEGER NO-UNDO.
  5540. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  5541. IF pcMode = "Design":U THEN
  5542. DO:
  5543. /* Make the object editable in the UIB */
  5544. RUN adeuib/_uibmode.p (INPUT TARGET-PROCEDURE).
  5545. /* Set UIBMode in all children of this object. Note that they *
  5546. * in turn will set UIBMode in their children and so on... */
  5547. {get ContainerTarget cTarget} NO-ERROR.
  5548. DO iTarget = 1 TO NUM-ENTRIES(cTarget):
  5549. hTarget = WIDGET-HANDLE(ENTRY(iTarget,cTarget)).
  5550. IF VALID-HANDLE(hTarget) THEN
  5551. {set UIBMode 'Design-Child':U hTarget}.
  5552. END.
  5553. END.
  5554. /* Set UIBMode for this object */
  5555. {set UIBMode pcMode}.
  5556. RETURN TRUE.
  5557. END FUNCTION.
  5558. /* _UIB-CODE-BLOCK-END */
  5559. &ANALYZE-RESUME
  5560. &ENDIF
  5561. &IF DEFINED(EXCLUDE-setUserProperty) = 0 &THEN
  5562. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setUserProperty Procedure
  5563. FUNCTION setUserProperty RETURNS LOGICAL
  5564. ( pcPropName AS CHARACTER, pcPropValue AS CHARACTER ) :
  5565. /*------------------------------------------------------------------------------
  5566. Purpose: Assigns a value to a dynamically-defined property,
  5567. allocating a slot for the property if it doesn't exist yet.
  5568. Params: INPUT pcPropName AS CHARACTER,
  5569. INPUT pcPropValue AS CHARACTER
  5570. Returns: LOGICAL (true)
  5571. ------------------------------------------------------------------------------*/
  5572. DEFINE VARIABLE cOldProps AS CHARACTER NO-UNDO.
  5573. DEFINE VARIABLE cNewProps AS CHARACTER NO-UNDO.
  5574. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  5575. DEFINE VARIABLE iNext AS INTEGER NO-UNDO.
  5576. /* These ad hoc properties are stored in the second entry in the
  5577. object's ADM-DATA attribute, as a string delimited by CHR(3)
  5578. between property/value pairs and CHR(4) between the property name
  5579. and its value. */
  5580. /* Changed to delimit name/value with CHR(4). */
  5581. IF pcPropValue = ? THEN /* Don't allow unknown value. */
  5582. pcPropValue = "":U.
  5583. cOldProps = ENTRY(2, TARGET-PROCEDURE:ADM-DATA, CHR(1)).
  5584. iIndex = INDEX(CHR(3) + cOldProps, CHR(3) + pcPropName + CHR(4)).
  5585. IF iIndex = 0 THEN /* Property wasn't defined yet. */
  5586. cNewProps = cOldProps + (IF cOldProps NE "":U THEN CHR(3) ELSE "":U) +
  5587. pcPropName + CHR(4) + pcPropValue.
  5588. ELSE DO:
  5589. ASSIGN iIndex = iIndex + LENGTH(pcPropName) /* End of current prop name */
  5590. /* iNext is the position of delimiter before the next property. */
  5591. iNext = INDEX(SUBSTR(cOldProps, iIndex + 1), CHR(3))
  5592. /* Substitute the new value for the old one, and then add back
  5593. any other property values if there were any. */
  5594. cNewProps = SUBSTR(cOldProps, 1, iIndex) + pcPropValue +
  5595. (IF iNext NE 0 THEN SUBSTR(cOldProps, iIndex + iNext) ELSE "":U).
  5596. END. /* END DO IF iIndex NE 0 */
  5597. TARGET-PROCEDURE:ADM-DATA = ENTRY(1,TARGET-PROCEDURE:ADM-DATA, CHR(1)) +
  5598. CHR(1) + CNewProps + CHR(1) +
  5599. ENTRY(3, TARGET-PROCEDURE:ADM-DATA, CHR(1)). /* entry 3 is user links */
  5600. RETURN TRUE.
  5601. END FUNCTION.
  5602. /* _UIB-CODE-BLOCK-END */
  5603. &ANALYZE-RESUME
  5604. &ENDIF
  5605. &IF DEFINED(EXCLUDE-showDataMessages) = 0 &THEN
  5606. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION showDataMessages Procedure
  5607. FUNCTION showDataMessages RETURNS CHARACTER
  5608. ( ) :
  5609. /*------------------------------------------------------------------------------
  5610. Purpose: Returns the name of the field (if any) from the first
  5611. error message, to allow the caller to use it to position the
  5612. cursor.
  5613. Params: <none>.
  5614. Notes: Invokes fetchMessages() to retrieve all messages stored in the
  5615. class property gcMessages.
  5616. (normally database update-related error messages), and
  5617. displays them in a alert-box of type error.
  5618. This function expects to receive back a single string
  5619. from fetchMessages with one or more messages delimited by CHR(3),
  5620. and within each message the message text, Fieldname (or blank) +
  5621. a Tablename (or blank), delimited by CHR(4) if present.
  5622. NOT IN USE BY standard ADM2, still used by WEB2
  5623. ------------------------------------------------------------------------------*/
  5624. DEFINE VARIABLE cMessages AS CHARACTER NO-UNDO.
  5625. DEFINE VARIABLE iMsg AS INTEGER NO-UNDO.
  5626. DEFINE VARIABLE iMsgCnt AS INTEGER NO-UNDO.
  5627. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  5628. DEFINE VARIABLE cFirstField AS CHARACTER NO-UNDO.
  5629. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  5630. DEFINE VARIABLE cTable AS CHARACTER NO-UNDO.
  5631. DEFINE VARIABLE cText AS CHARACTER NO-UNDO INIT "":U.
  5632. cMessages = DYNAMIC-FUNCTION('fetchMessages':U IN TARGET-PROCEDURE).
  5633. iMsgCnt = NUM-ENTRIES(cMessages, CHR(3)).
  5634. DO iMsg = 1 TO iMsgCnt:
  5635. /* Format a string of messages; each has a first line of
  5636. "Field: <field> "Table: <table>"
  5637. (if either of these is defined) plus the error message on a
  5638. separate line. */
  5639. ASSIGN cMessage = ENTRY(iMsg, cMessages, CHR(3))
  5640. cField = IF NUM-ENTRIES(cMessage, CHR(4)) > 1 THEN
  5641. ENTRY(2, cMessage, CHR(4)) ELSE "":U
  5642. cTable = IF NUM-ENTRIES(cMessage, CHR(4)) > 2 THEN
  5643. ENTRY(3, cMessage, CHR(4)) ELSE "":U
  5644. cText = cText + (IF cField NE "":U THEN
  5645. dynamic-function('messageNumber':U IN TARGET-PROCEDURE, 10) ELSE "":U)
  5646. + cField + " ":U +
  5647. (IF cTable NE "":U THEN
  5648. dynamic-function('messageNumber':U IN TARGET-PROCEDURE, 11) ELSE "":U) + cTable +
  5649. (IF cField NE "":U OR cTable NE "":U THEN "~n":U ELSE "":U)
  5650. + " ":U + ENTRY(1, cMessage, CHR(4)) + "~n":U.
  5651. /* Return the field name from the first error message so the caller can
  5652. use it to position the cursor. */
  5653. IF iMsg = 1 THEN cFirstField = cField.
  5654. END. /* END DO iMsg */
  5655. IF cText NE "":U THEN
  5656. MESSAGE cText VIEW-AS ALERT-BOX ERROR.
  5657. RETURN cFirstField.
  5658. END FUNCTION.
  5659. /* _UIB-CODE-BLOCK-END */
  5660. &ANALYZE-RESUME
  5661. &ENDIF
  5662. &IF DEFINED(EXCLUDE-showmessage) = 0 &THEN
  5663. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION showmessage Procedure
  5664. FUNCTION showmessage RETURNS LOGICAL
  5665. ( pcMessage AS CHARACTER ) :
  5666. /*------------------------------------------------------------------------------
  5667. Purpose: Displays (using a simple MESSAGE statement by default)
  5668. either a literal message string, or a message number which
  5669. is returned by the messageNumber function.
  5670. Parameters: INPUT pcMessage AS CHARACTER --
  5671. - Either a literal message string
  5672. - Or a message number in character form.
  5673. A message number can be followed by a comma delimited list
  5674. with maximum 10 entries:
  5675. The LAST entry (2 - 10) is:
  5676. 1) The word "Question" or "YesNo", in which case the message is
  5677. displayed with YES-NO buttons and the answer is returned.
  5678. 2) The word "YesNoCancel", in which case the message is displayed
  5679. with YES-NO-CANCEL buttons and the answer is returned.
  5680. 3) The word "OkCancel", in which case the message is displayed
  5681. with OK-CANCEL buttons and the answer is returned.
  5682. Optional entries from 2 to 10:
  5683. Each entry will be placed into the numeric message
  5684. in place of the the string of form &n, where n is an integer
  5685. between 1 and 9, inclusive (Entry 2 will replace &1 etc)
  5686. Returns: LOGICAL: true/false if the Question option is used,
  5687. true/false/unknown if the YesNoCancel option is used
  5688. else true.
  5689. Notes: This function can be overridden to use a mechanism other than
  5690. the MESSAGE statement to display messages, and still use the
  5691. messageNumber function to map message numbers to translatable text.
  5692. Note that this is different from addMessage, fetchMessages, etc.,
  5693. which log messages in a temp-table for later retrieval.
  5694. ------------------------------------------------------------------------------*/
  5695. DEFINE VARIABLE iMessage AS INTEGER NO-UNDO.
  5696. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  5697. DEFINE VARIABLE cMessageType AS CHARACTER NO-UNDO.
  5698. DEFINE VARIABLE cMsg AS CHARACTER EXTENT 9 NO-UNDO.
  5699. DEFINE VARIABLE iNumParam AS INT NO-UNDO.
  5700. DEFINE VARIABLE lAnswer AS LOGICAL NO-UNDO.
  5701. iMessage = INTEGER(ENTRY(1,pcMessage)) NO-ERROR. /* was a number passed? */
  5702. IF ERROR-STATUS:ERROR THEN
  5703. MESSAGE pcMessage VIEW-AS ALERT-BOX INFORMATION. /* No -- use the literal text */
  5704. ELSE DO: /* A numeric message */
  5705. ASSIGN
  5706. cMessage = messageNumber(iMessage)
  5707. iNumParam = NUM-ENTRIES(pcMessage)
  5708. cMessageType = ENTRY(iNumParam,pcMessage)
  5709. cMsg[1] = IF iNumParam > 1 THEN ENTRY(2,pcMessage) ELSE "":U
  5710. cMsg[2] = IF iNumParam > 2 THEN ENTRY(3,pcMessage) ELSE "":U
  5711. cMsg[3] = IF iNumParam > 3 THEN ENTRY(4,pcMessage) ELSE "":U
  5712. cMsg[4] = IF iNumParam > 4 THEN ENTRY(5,pcMessage) ELSE "":U
  5713. cMsg[5] = IF iNumParam > 5 THEN ENTRY(6,pcMessage) ELSE "":U
  5714. cMsg[6] = IF iNumParam > 6 THEN ENTRY(7,pcMessage) ELSE "":U
  5715. cMsg[7] = IF iNumParam > 7 THEN ENTRY(8,pcMessage) ELSE "":U
  5716. cMsg[8] = IF iNumParam > 8 THEN ENTRY(9,pcMessage) ELSE "":U
  5717. cMsg[9] = IF iNumParam > 9 THEN ENTRY(10,pcMessage) ELSE "":U
  5718. cMessage = SUBSTITUTE(cMessage,
  5719. cMsg[1],cMsg[2],cMsg[3],cMsg[4],cMsg[5],
  5720. cMsg[6],cMsg[7],cMsg[8],cMsg[9]).
  5721. /* Yes -- get the msg */
  5722. CASE cMessageType:
  5723. WHEN 'Question':U OR WHEN 'YesNo':U THEN
  5724. DO:
  5725. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO
  5726. UPDATE lAnswer.
  5727. RETURN lAnswer.
  5728. END.
  5729. WHEN 'OkCancel':U THEN
  5730. DO:
  5731. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS OK-CANCEL
  5732. UPDATE lAnswer.
  5733. RETURN lAnswer.
  5734. END.
  5735. WHEN 'YesNoCancel':U THEN
  5736. DO:
  5737. MESSAGE cMessage VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO-CANCEL
  5738. UPDATE lAnswer.
  5739. RETURN lAnswer.
  5740. END.
  5741. OTHERWISE
  5742. MESSAGE cMessage VIEW-AS ALERT-BOX INFORMATION.
  5743. END CASE.
  5744. END. /* END ELSE IF numeric message */
  5745. RETURN TRUE. /* Return value not meaningful in this case. */
  5746. END FUNCTION.
  5747. /* _UIB-CODE-BLOCK-END */
  5748. &ANALYZE-RESUME
  5749. &ENDIF
  5750. &IF DEFINED(EXCLUDE-signature) = 0 &THEN
  5751. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION signature Procedure
  5752. FUNCTION signature RETURNS CHARACTER
  5753. ( pcName AS CHARACTER ) :
  5754. /*------------------------------------------------------------------------------
  5755. Purpose: Returns the signature of the named function or internal procedure,
  5756. in the format returned by the Progress GET-SIGNATURE method.
  5757. Params: INPUT pcName AS CHARACTER -- function or procedure name.
  5758. Returns: CHARACTER: signature in Progress GET-SIGNATURE format.
  5759. Notes: This function is needed because the routine may be located in
  5760. a SUPER procedure, so we need to search SUPER-PROCEDURES if needed.
  5761. ------------------------------------------------------------------------------*/
  5762. DEFINE VARIABLE iEntry AS INTEGER NO-UNDO.
  5763. DEFINE VARIABLE cSuperProcs AS CHARACTER NO-UNDO.
  5764. DEFINE VARIABLE hSuper AS HANDLE NO-UNDO.
  5765. IF LOOKUP(pcName, TARGET-PROCEDURE:INTERNAL-ENTRIES) NE 0 THEN
  5766. RETURN TARGET-PROCEDURE:GET-SIGNATURE(pcName). /* It's defined "locally" */
  5767. ELSE DO:
  5768. cSuperProcs = TARGET-PROCEDURE:SUPER-PROCEDURES. /* List of SUper Proc handles */
  5769. DO iEntry = 1 to NUM-ENTRIES(cSuperProcs):
  5770. hSuper = WIDGET-HANDLE(ENTRY(iEntry, cSuperProcs)).
  5771. IF VALID-HANDLE(hSuper) AND LOOKUP(pcName, hSuper:INTERNAL-ENTRIES) NE 0 THEN
  5772. RETURN hSuper:GET-SIGNATURE(pcName). /* It's defined in this super proc */
  5773. END.
  5774. END.
  5775. RETURN "". /* Not found anywhere */
  5776. END FUNCTION.
  5777. /* _UIB-CODE-BLOCK-END */
  5778. &ANALYZE-RESUME
  5779. &ENDIF