ViewEnvironment.js 273 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150
  1. /**
  2. * @readonly
  3. * @enum {String} ViewFilterDataLogic
  4. * @property {String} or color for a white square or piece.
  5. * @property {String} and color for a black square or piece.
  6. */
  7. /**
  8. * ViewFilter 视图过滤条件
  9. * @typedef {Object} ViewFilter
  10. * @property {String} logic - 可选值:“and”或者“or”,表示和前一个条件的逻辑运算关系。
  11. * @property {String} path - 要过滤的data数据的路径。
  12. * @property {String} comparison - 比较运算符,可选值:<br/>
  13. * <div style='padding-left:150px;'>
  14. * <b>equals</b> 或 <b>==</b> 或:表示等于。<br/>
  15. * <b>notEquals</b> 或 <b>!=</b> :表示不等于。<br/>
  16. * <b>greaterThan</b> 或 <b>></b> :表示大于。<br/>
  17. * <b>greaterThanOrEqualTo</b> 或 <b>>=</b> :表示大于或等于。<br/>
  18. * <b>lessThan</b> 或 <b><</b> :表示小于。<br/>
  19. * <b>lessThanOrEqualTo</b> 或 <b><=</b> :表示小于等于。<br/>
  20. * <b>like</b> :表示部分匹配。<br/>
  21. * <b>notLike</b> :表示不匹配。<br/>
  22. * <b>range</b> :表示一定的范围。<br/>
  23. * <b>in</b> :表示在某几个特定的值当中。<br/>
  24. * </div>
  25. * @property {String} formatType - 过滤数据的数据类型,可选值:
  26. * <div style='padding-left:150px;'>
  27. * <b>textValue</b> :文本。<br/>
  28. * <b>numberValue</b> :数字。<br/>
  29. * <b>dateTimeValue</b> :日期时间。<br/>
  30. * <b>booleanValue</b> :布尔值。<br/>
  31. * </div>
  32. * @property {(String|Number|Boolean)} value - 过滤的值,根据formatType提供匹配的数据类型的值,如果是dateTimeValue数据类型,则提供日期格式的字符串,格式如“YYYY-MM-DD HH:MM:SS”。当comparison值为“range”时,此值表示范围中的第一个值。当comparison值为“in”时,多个值用半角逗号","分开。
  33. * @property {(String|Number|Boolean)} otherValue - 当comparison值为“range”时,此值表示范围中的第二个值。当comparison值不为“range”时,忽略此值。
  34. * @example
  35. * {
  36. * "logic":"and",
  37. * "path":"$work.title",
  38. * "comparison":"like",
  39. * "value":"关于",
  40. * "formatType":"textValue"
  41. * }
  42. * @example
  43. * {
  44. * "logic":"and",
  45. * "path":"month",
  46. * "comparison":"in",
  47. * "value":"一月,二月,三月",
  48. * "formatType":"textValue"
  49. * }
  50. */
  51. /**
  52. * StatementFilter 查询视图的过滤条件
  53. * @typedef {Object} StatementFilter
  54. * @property {String} path - 要过滤的data数据的路径。
  55. * 如果语句格式是JPQL,形式为查询语句中的"表别名.字段名",如"o.title"。
  56. * 在v8.0以后,系统增加了原生SQL,则使用数据库的字段名,如"xtitle"。
  57. * @property {String} comparison - 比较运算符,可选值:<br/>
  58. * <div style='padding-left:150px;'>
  59. * <b>equals</b> 或 <b>==</b> 或:表示等于。<br/>
  60. * <b>notEquals</b> 或 <b>!=</b> :表示不等于。<br/>
  61. * <b>greaterThan</b> 或 <b>></b> :表示大于。<br/>
  62. * <b>greaterThanOrEqualTo</b> 或 <b>=></b> :表示大于或等于。<br/>
  63. * <b>lessThan</b> 或 <b><</b> :表示小于。<br/>
  64. * <b>lessThanOrEqualTo</b> 或 <b><=</b> :表示小于等于。<br/>
  65. * <b>like</b> :表示部分匹配。<br/>
  66. * <b>notLike</b> :表示不匹配。<br/>
  67. * </div>
  68. * @property {String} formatType - 过滤数据的数据类型,可选值:
  69. * <div style='padding-left:150px;'>
  70. * <b>textValue</b> :文本。<br/>
  71. * <b>numberValue</b> :数字。<br/>
  72. * <b>dateTimeValue</b> :日期时间。<br/>
  73. * <b>dateValue</b> :仅日期。<br/>
  74. * <b>timeValue</b> :仅时间。<br/>
  75. * <b>booleanValue</b> :布尔值。<br/>
  76. * </div>
  77. * @property {(String|Number|Boolean)} value - 过滤的值,根据formatType提供匹配的数据类型的值。如果是dateTimeValue数据类型,则提供日期格式的字符串,格式如“YYYY-MM-DD HH:MM:SS”。
  78. * 如果是dateValue数据类型,则提供日期格式的字符串,格式如“YYYY-MM-DD”。如果是timeValue数据类型,则提供时间格式的字符串,格式如“HH:MM:SS”。
  79. * @example
  80. *{
  81. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  82. * "comparison":"like",
  83. * "value":"关于",
  84. * "formatType":"textValue"
  85. *}
  86. */
  87. /**
  88. * StatementParameter 查询视图的过滤条件值参数,对查询语句where语句的形如":person"的参数部分进行赋值<br/>
  89. * 在v8.0以后,系统还新增了问号加数字的传值参数,如"?1",用法和 ":field"一致。
  90. * 有以下规则:<br/>
  91. * 1、参数名称为下列值时,后台自动赋值:person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组)。v8.0以后系统自动解析,不需要再传这类参数。<br/>
  92. * 2、如果对比的是日期,需要传入 Date 类型。<br/>
  93. * 3、如果运算符用的是 like, noLike,模糊查询,值为 "%{value}%"。
  94. * 4、
  95. * @typedef {Object} StatementParameter
  96. * @example
  97. * {
  98. * "person" : "", //v8.0以后系统自动解析,不需要再传这类参数。
  99. * "startTime" : (new Date("2020-01-01")), //日期格式
  100. * "applicationName" : "%test%", //like或notlike
  101. * "processName" : "test流程", //其他写确定的值
  102. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  103. * }
  104. */
  105. /*********this.org 的 typedef 开始********/
  106. /**
  107. * 在本API的this.org模块中,当使用群组作为检索参数的时候,允许使用群组的distinguishedName、name、id、unique属性值,或者包含这些属性值的对象。
  108. * @typedef {(String|Object)} GroupFlag
  109. * @example
  110. * //以下均为合法参数
  111. *
  112. * //群组属性值
  113. * "工作汇报读者@ReportReader@G" //群组识别名
  114. * "cce8bc22-225a-4f85-8132-7374d546886e" //id
  115. * "ReportReader" //群组unique
  116. * "工作汇报读者" //群组名称
  117. *
  118. * //包含下列属性的对象
  119. * { "distinguishedName": "工作汇报读者@ReportReader@G" } //群组识别名
  120. * { "unique": "cce8bc22-225a-4f85-8132-7374d546886e" } //群组id
  121. * { "unique": "ReportReader" } //群组unique
  122. * { "name": "工作汇报读者" } //群组名称
  123. */
  124. /**
  125. * 在本API的this.org模块中,当使用人员(个人)作为检索参数的时候,允许使用人员的distinguishedName、name、id、unique属性值或包含这些属性的对象。
  126. * @typedef {(String|Object)} PersonFlag
  127. * @example
  128. * //以下均为合法参数
  129. *
  130. * //人员属性值
  131. * "李四@lisi@P" //人员识别名
  132. * "cce8bc22-225a-4f85-8132-7374d546886e" //人员id
  133. * "lisi" //人员unique
  134. *
  135. * //包含下列属性的对象
  136. * { "distinguishedName": "李四@lisi@P" } //人员识别名
  137. * { "id": "cce8bc22-225a-4f85-8132-7374d546886e" } //人员id
  138. * { "unique": "lisi" } //人员unique
  139. */
  140. /**
  141. * 在本API的this.org模块中,当使用角色作为检索参数的时候,允许使用角色的distinguishedName、name、id、unique属性值或包含这些属性的对象。
  142. * @typedef {(String|Object)} RoleFlag
  143. * @example
  144. * //以下均为合法参数
  145. * //角色属性值
  146. * "PersonManager@PersonManagerSystemRole@R" //角色识别名
  147. * "85874fbc-9af0-4a07-bc2f-0ab899cc4c7d" //角色id
  148. * "PersonManagerSystemRole" //角色unique
  149. * "PersonManager" //角色名称
  150. *
  151. * //包含下列属性的对象
  152. * { "distinguishedName": "PersonManager@PersonManagerSystemRole@R" } //角色识别名
  153. * { "id": "85874fbc-9af0-4a07-bc2f-0ab899cc4c7d" } //角色id
  154. * { "unique": "PersonManagerSystemRole" } //角色unique
  155. * { "name": "PersonManager" } //角色名称
  156. */
  157. /**
  158. * 在本API的this.org模块中,当使用身份作为检索参数的时候,允许使用身份的distinguishedName、id、unique属性值或包含这些属性的对象。
  159. * @typedef {(String|Object)} IdentityFlag
  160. * @example
  161. * //以下均为合法参数
  162. * //角色属性值
  163. * "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I" //身份识别名
  164. * "903dbb04-085c-4bb1-9c24-3009bd5f7372" //身份id
  165. * "903dbb04-085c-4bb1-9c24-3009bd5f7372" //身份unique,系统默认的unique和id一致
  166. *
  167. * //包含下列属性的对象
  168. * { "distinguishedName": "张三@903dbb04-085c-4bb1-9c24-3009bd5f7372@I" } //身份识别名
  169. * { "id": "903dbb04-085c-4bb1-9c24-3009bd5f7372" } //身份id
  170. * { "unique": "903dbb04-085c-4bb1-9c24-3009bd5f7372" } //身份unique,系统默认的unique和id一致
  171. */
  172. /**
  173. * 在本API的this.org模块中,当使用组织作为检索参数的时候,允许使用组织的distinguishedName、id、unique属性值或包含这些属性的对象。
  174. * @typedef {(String|Object)} UnitFlag
  175. * @example
  176. * //以下均为合法参数
  177. * //组织属性值
  178. * "开发部@kfb@U" //组织标识名
  179. * "cce8bc22-225a-4f85-8132-7374d546886e" //组织id
  180. * "kfb" //组织unique
  181. *
  182. * //包含下列属性的对象
  183. * { "distinguishedName": "开发部@kfb@U" } //组织标识名
  184. * { "id": "cce8bc22-225a-4f85-8132-7374d546886e" } //组织id
  185. * { "unique": "kfb" } //组织unique
  186. */
  187. MWF.xScript = MWF.xScript || {};
  188. MWF.xScript.ViewEnvironment = function (ev) {
  189. var _form = ev.view;
  190. /**
  191. * 字符串,当前应用类型。<br/><br/>
  192. * <table>
  193. * <tr>
  194. * <th>值</th>
  195. * <th>应用类型</th>
  196. * </tr>
  197. * <tr>
  198. * <td>cms</td>
  199. * <td>内容管理</td>
  200. * </tr>
  201. * <tr>
  202. * <td>process</td>
  203. * <td>流程管理</td>
  204. * </tr>
  205. * <tr>
  206. * <td>portal</td>
  207. * <td>门户管理</td>
  208. * </tr>
  209. * <tr>
  210. * <td>query</td>
  211. * <td>数据中心</td>
  212. * </tr>
  213. * </table>
  214. * @module appType
  215. * @o2cn 应用类型
  216. * @o2category web
  217. * @o2ordernumber 170
  218. * @instance
  219. * @example
  220. * var title;
  221. * if( this.appType === "cms" ){
  222. * title = this.documentContext.getDocument().title
  223. * }else if( this.appType === "process" ){
  224. * title = this.workContext.getWork().title
  225. * }
  226. **/
  227. this.appType = "query";
  228. this.library = COMMON;
  229. //this.library.version = "4.0";
  230. //data
  231. // var getJSONData = function (jData) {
  232. // return new MWF.xScript.JSONData(jData, function (data, key, _self) {
  233. // var p = { "getKey": function () { return key; }, "getParent": function () { return _self; } };
  234. // while (p && !_forms[p.getKey()]) p = p.getParent();
  235. // if (p) if (p.getKey()) if (_forms[p.getKey()]) _forms[p.getKey()].resetData();
  236. // });
  237. // };
  238. // this.setData = function (data) {
  239. // this.data = getJSONData(data);
  240. // this.data.save = function (callback) {
  241. // var formData = {
  242. // "data": data,
  243. // "sectionList": _form.getSectionList()
  244. // };
  245. // form.workAction.saveData(function (json) { if (callback) callback(); }.bind(this), null, work.id, jData);
  246. // }
  247. // };
  248. // this.setData(_data);
  249. //dict
  250. /**
  251. * this.Dict是一个工具类,如果您在流程、内容管理、门户和服务管理中创建了数据字典,可以使用this.Dict类对数据字典进行增删改查操作。<br/>
  252. * 从v8.0版本开始,支持在门户和服务管理中创建数据字典。
  253. * @module Dict
  254. * @o2cn 数据字典
  255. * @o2category web
  256. * @o2ordernumber 120
  257. * @param {(String|Object)} optionsOrName 数据字典标识字符串或者是对象。
  258. * <div>如果对本应用的数据字典操作,将optionsOrName设置为string。</div>
  259. * <pre><code class='language-js'>var dict = new this.Dict("bulletinDictionary"); //数据字典的名称、别名或id
  260. * </code></pre>
  261. * <div>如果需要对其他应用的数据字典进行操作,将options设置为JsonObject</div>
  262. * <pre><code class='language-js'>var dict = new this.Dict({
  263. * //type: 应用类型。可以为process cms portal service。
  264. * //在流程和内容管理中如果没有该选项或者值为空字符串,则表示应用脚本和被应用的脚本配置类型相同。
  265. * //比如在流程的A应用脚本中引用流程B应用的脚本配置,则type可以省略。
  266. * //为了兼容老版本,在门户中使用需要指定type,否则默认值为process
  267. * type : "cms",
  268. * application : "bulletin", //数据字典所在的流程、门户、CMS的名称、别名、id, 默认为当前应用,服务管理中忽略该参数
  269. * name : "bulletinDictionary", // 数据字典的名称、别名、id
  270. * anonymous : true //允许用户在未登录的情况下读取cms的数据字典, type为cms的时候改参数才有效,默认为false,该参数名也可以是 enableAnonymous
  271. * });
  272. *
  273. * //引用服务管理中的数据字典
  274. * var dict = new this.Dict({
  275. * "type": "service",
  276. * "name": "dictName"
  277. * });
  278. *
  279. * //引用流程管理中的数据字典
  280. * var dict = new this.Dict({
  281. * "type": "process",
  282. * "application": "appName",
  283. * "name": "dictName"
  284. * });
  285. *
  286. * //引用内容管理中的数据字典
  287. * var dict = new this.Dict({
  288. * "type": "cms",
  289. * "application": "appName",
  290. * "name": "dictName"
  291. * });
  292. *
  293. * //引用门户管理中的数据字典
  294. * var dict = new this.Dict({
  295. * "type": "portal",
  296. * "application": "appName",
  297. * "name": "dictName"
  298. * });
  299. *
  300. * </code></pre>
  301. * @return {Object} Dict对象
  302. * @o2syntax
  303. * //您可以在页面、表单、流程各个嵌入脚本中,通过this.Dict()对本应用或其他应用的数据字典中的数据进行增删改查,如下:
  304. * var dict = new this.Dict( options )
  305. */
  306. /**
  307. * 根据路径获取数据字典中的数据。
  308. * @method get
  309. * @methodOf module:Dict
  310. * @static
  311. * @param {String} [path] 数据字典中的数据路径,允许使用中文。当路径为多级时,用点号(.)分隔。当值为空的时候,表示获取数据字典中的所有数据。
  312. * @param {Function} [success] 获取数据成功时的回调函数。
  313. * @param {Function} [failure] 获取数据失败时的回调。
  314. * @param {Boolean} [async] 是否异步执行,默认为false。
  315. * @param {Boolean} [refresh] 是否忽略本地缓存直接从服务器获取,默认为false。如果需要在脚本中该数据字典是变化的(比如编号),需设置为true。
  316. * @return {(Promise|Object|Array|String|Number|Boolean)}
  317. * 当async为true时返回Promise({@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise说明});
  318. * 否则返回数据字典的数据,类型和配置数据字典时候指定的一致。
  319. * @o2syntax
  320. * var data = dict.get( path, success, failure, async, refresh )
  321. * @example
  322. * var dict = new this.Dict("bulletinDictionary");
  323. *
  324. * //没有参数的时候,表示同步获取获取所有数据
  325. * var data = dict.get()
  326. *
  327. * //同步执行,获取category下key为subCategory的数据
  328. * var data = dict.get("category.subCategory");
  329. *
  330. * //异步执行,使用回调处理数据,如果category为数组,获取第0项数据
  331. * dict.get("category.0", function(data){
  332. * //data 是数据字典的数据
  333. * }, function(xhr){
  334. * //xhr 为 xmlHttpRequest
  335. * }, true //异步执行
  336. * )
  337. *
  338. * //异步执行,使用Promise处理结果
  339. * var promise = dict.get("category", null, null, true);
  340. * promise.then( function(data){
  341. * //data 是数据字典的数据
  342. * })
  343. * @example
  344. * <caption>
  345. * 已经配置好了如下图所示的数据字典
  346. * <img src='img/module/Dict/dict.png' />
  347. * </caption>
  348. * var dict = new this.Dict({
  349. * //type: 应用类型。可以为process cms。
  350. * //如果没有该选项或者值为空字符串,则表示应用脚本和被应用的脚本配置类型相同。
  351. * //比如在流程的A应用脚本中引用流程B应用的脚本配置,则type可以省略。
  352. * type : "cms",
  353. * application : "bulletin", //流程、CMS的名称、别名、id, 默认为当前应用
  354. * name : "bulletinDictionary", // 数据字典的名称、别名、id
  355. * anonymous : true //允许用户在未登录的情况下读取cms的数据字典, type为process的时候此参数无效,默认为false,该参数名也可以是enableAnonymous
  356. * });
  357. *
  358. * var data = dict.get();
  359. * //data的值为
  360. * {
  361. * "category": [
  362. * {
  363. * "enable": true,
  364. * "sequence": 1.0,
  365. * "text": "公司公告",
  366. * "value": "company"
  367. * },
  368. * {
  369. * "enable": "false",
  370. * "sequence": 2.0,
  371. * "text": "部门公告",
  372. * "value": "department"
  373. * }
  374. * ]
  375. * }
  376. *
  377. * var category = dict.get("category");
  378. * //category的值为
  379. * [
  380. * {
  381. * "enable": true,
  382. * "sequence": 1.0,
  383. * "text": "公司公告",
  384. * "value": "company"
  385. * },
  386. * {
  387. * "enable": "false",
  388. * "sequence": 2.0,
  389. * "text": "部门公告",
  390. * "value": "department"
  391. * }
  392. * ]
  393. *
  394. * var array0 = dict.get("category.0");
  395. * //array0 的值为
  396. * {
  397. * "enable": true,
  398. * "sequence": 1.0,
  399. * "text": "公司公告",
  400. * "value": "company"
  401. * }
  402. *
  403. * var enable = dict.get("category.0.eanble");
  404. * //enable 的值为 true
  405. */
  406. /**
  407. * 根据路径新增数据字典的数据。
  408. * @method add
  409. * @methodOf module:Dict
  410. * @instance
  411. * @param {String} path 数据字典中的数据路径,允许使用中文。当路径为多级时,用点号(.)分隔。如果path在数据字典中已有数据,且原有数据是数组,则数组添加一项;如果原有数据不是数组,则报错。
  412. * @param {(Object|Array|String|Number|Boolean)} data 需要新增的数据
  413. * @param {Function} [success] 增加数据成功时的回调函数。
  414. * @param {Function} [failure] 增加数据错误时的回调函数。
  415. * @o2syntax
  416. * dict.add( path, data, success, failure )
  417. * @example
  418. * var dict = new this.Dict("bulletinDictionary");
  419. *
  420. * dict.add( "category", { text : "系统公告", value : "system" }, function(data){
  421. * //data 形如
  422. * //{
  423. * // "id": "80ed5f60-500f-4358-8bbc-b7e81f77aa39" //id为数据字典ID
  424. * //}
  425. * }, function(xhr){
  426. * //xhr 为 xmlHttpRequest
  427. * });
  428. * @example
  429. * <caption>
  430. * 对get方法样例的数据字典进行赋值,如下:
  431. * </caption>
  432. * var dict = new this.Dict("bulletinDictionary");
  433. *
  434. * dict.add( "category", { text : "系统公告", value : "system" }, function(data){
  435. * //data 形如
  436. * //{
  437. * // "id": "80ed5f60-500f-4358-8bbc-b7e81f77aa39" //id为数据字典ID
  438. * //}
  439. * }, function(xhr, text, error){
  440. * //xhr 为 xmlHttpRequest, text 为错误文本, error为Error对象
  441. * });
  442. * //数据字典的值变为
  443. * {
  444. * "category": [
  445. * {
  446. * "enable": true,
  447. * "sequence": 1.0,
  448. * "text": "公司公告",
  449. * "value": "company"
  450. * },
  451. * {
  452. * "enable": "false",
  453. * "sequence": 2.0,
  454. * "text": "部门公告",
  455. * "value": "department"
  456. * },
  457. * {
  458. * "text": "系统公告",
  459. * "value": "system"
  460. * }
  461. * ]
  462. * }
  463. *
  464. * dict.add( "category.2.sequence", 3 );
  465. * //数据字典的值变为
  466. * {
  467. * "category": [
  468. * {
  469. * "enable": true,
  470. * "sequence": 1.0,
  471. * "text": "公司公告",
  472. * "value": "company"
  473. * },
  474. * {
  475. * "enable": "false",
  476. * "sequence": 2.0,
  477. * "text": "部门公告",
  478. * "value": "department"
  479. * },
  480. * {
  481. * "sequence" : 3.0,
  482. * "text": "系统公告",
  483. * "value": "system"
  484. * }
  485. * ]
  486. * }
  487. * dict.add( "archiveOptions", {
  488. * "yes" : "是",
  489. * "no" : "否"
  490. * });
  491. * //数据字典的值变为
  492. * {
  493. * "category": [
  494. * {
  495. * "enable": true,
  496. * "sequence": 1.0,
  497. * "text": "公司公告",
  498. * "value": "company"
  499. * },
  500. * {
  501. * "enable": "false",
  502. * "sequence": 2.0,
  503. * "text": "部门公告",
  504. * "value": "department"
  505. * },
  506. * {
  507. * "sequence" : 3.0,
  508. * "text": "系统公告",
  509. * "value": "system"
  510. * }
  511. *
  512. * ],
  513. * "archiveOptions" : {
  514. * "yes" : "是",
  515. * "no" : "否"
  516. * }
  517. * }
  518. * @example
  519. * <caption>下面是错误的赋值,如下:</caption>
  520. * dict.add( "category.3", { text : "系统公告", value : "system" }); //出错,因为不能对数组下标直接赋值
  521. *
  522. * dict.add( "category.1.value", { text : "系统公告" } ); //出错,因为不能对已经存在的非数组路径赋值
  523. */
  524. /**
  525. * 根据路径修改数据字典的数据。
  526. * @method set
  527. * @methodOf module:Dict
  528. * @instance
  529. * @param {String} path 数据字典中的数据路径,允许使用中文。当路径为多级时,用点号(.)分隔。如果数据路径不存在,则报错。
  530. * @param {(Object|Array|String|Number|Boolean)} data 修改后的数据
  531. * @param {Function} [success] 设置数据成功时的回调函数。
  532. * @param {Function} [failure] 设置数据错误时的回调函数。
  533. * @o2syntax
  534. * dict.set( path, data, success, failure )
  535. * @example
  536. * var dict = new this.Dict("bulletinDictionary");
  537. *
  538. * dict.set( "category", { text : "系统公告", value : "system" }, function(data){
  539. * //data 形如
  540. * //{
  541. * // "id": "80ed5f60-500f-4358-8bbc-b7e81f77aa39" //id为数据字典ID
  542. * //}
  543. * }, function(xhr){
  544. * //xhr 为 xmlHttpRequest
  545. * });
  546. * @example
  547. * <caption>
  548. * 对Example add的数据字典进行赋值,如下:
  549. * </caption>
  550. * var dict = new this.Dict("bulletinDictionary");
  551. *
  552. * dict.set( "archiveOptions", [ { text : "是" }, { text : "否" } ]);
  553. * //数据字典的值变为
  554. * {
  555. * "category": [
  556. * {
  557. * "enable": true,
  558. * "sequence": 1.0,
  559. * "text": "公司公告",
  560. * "value": "company"
  561. * },
  562. * {
  563. * "enable": "false",
  564. * "sequence": 2.0,
  565. * "text": "部门公告",
  566. * "value": "department"
  567. * },
  568. * {
  569. * "sequence" : 3.0,
  570. * "text": "系统公告",
  571. * "value": "system"
  572. * }
  573. *
  574. * ],
  575. * "archiveOptions" : [ { text : "是" }, { text : "否" } ]
  576. * }
  577. *
  578. * dict.set( "category.2", { text : "县级公告", value : "county" }, function(data){
  579. * //data 形如
  580. * //{
  581. * // "id": "80ed5f60-500f-4358-8bbc-b7e81f77aa39" //id为数据字典ID
  582. * //}
  583. * }, function(xhr){
  584. * //xhr 为 xmlHttpRequest
  585. * });
  586. *
  587. * /数据字典的值变为
  588. * {
  589. * "category": [
  590. * {
  591. * "enable": true,
  592. * "sequence": 1.0,
  593. * "text": "公司公告",
  594. * "value": "company"
  595. * },
  596. * {
  597. * "enable": "false",
  598. * "sequence": 2.0,
  599. * "text": "部门公告",
  600. * "value": "department"
  601. * },
  602. * {
  603. * "text": "县级公告",
  604. * "value": "county"
  605. * }
  606. * ],
  607. * "archiveOptions" : [ { text : "是" }, { text : "否" } ]
  608. * }
  609. *
  610. * dict.set( "category.1.sequence", 3 );
  611. * dict.set( "category.2.sequence", 2 );
  612. * //数据字典的值变为
  613. * {
  614. * "category": [
  615. * {
  616. * "enable": true,
  617. * "sequence": 1.0,
  618. * "text": "公司公告",
  619. * "value": "company"
  620. * },
  621. * {
  622. * "enable": "false",
  623. * "sequence": 3.0,
  624. * "text": "部门公告",
  625. * "value": "department"
  626. * },
  627. * {
  628. * "sequence": 2.0,
  629. * "text": "县级公告",
  630. * "value": "county"
  631. * }
  632. * ],
  633. * "archiveOptions" : [ { text : "是" }, { text : "否" } ]
  634. * }
  635. * @example
  636. * <caption>
  637. * 下面是错误的赋值:
  638. * </caption>
  639. * dict.set( "category_1", { text : "公司公告" } ); //出错,因为category_1在数据字典中不存在
  640. */
  641. /**
  642. * 根据路径删除数据字典的数据。
  643. * @method delete
  644. * @methodOf module:Dict
  645. * @instance
  646. * @param {String} path 数据字典中的数据路径,允许使用中文。当路径为多级时,用点号(.)分隔。如果数据路径不存在,则报错。如果删除数组中的某一项,只能删除最后一项。
  647. * @param {Function} [success] 删除数据成功时的回调函数。
  648. * @param {Function} [failure] 删除数据错误时的回调函数。
  649. * @o2syntax
  650. * dict.delete( path, success, failure )
  651. * @example
  652. * var dict = new this.Dict("bulletinDictionary");
  653. *
  654. * dict.delete( "category", function(){
  655. * }, function(xhr){
  656. * //xhr 为 xmlHttpRequest
  657. * });
  658. * @example
  659. * <caption>
  660. * 对Example set的数据字典进行赋值,如下:
  661. * </caption>
  662. * var dict = new this.Dict("bulletinDictionary");
  663. *
  664. * dict.delete( "archiveOptions");
  665. * //数据字典的值变为
  666. * {
  667. * "category": [
  668. * {
  669. * "enable": true,
  670. * "sequence": 1.0,
  671. * "text": "公司公告",
  672. * * "value": "company"
  673. * },
  674. * {
  675. * "enable": "false",
  676. * "sequence": 3.0,
  677. * "text": "部门公告",
  678. * "value": "department"
  679. * },
  680. * {
  681. * "sequence": 2.0,
  682. * "text": "县级公告",
  683. * "value": "county"
  684. * }
  685. * ]
  686. * }
  687. *
  688. * dict.delete( "category.2.sequence", function(data){
  689. * //data 形如
  690. * //{
  691. * // "id": "80ed5f60-500f-4358-8bbc-b7e81f77aa39" //id为数据字典ID
  692. * //}
  693. * }, function(xhr){
  694. * //xhr 为 xmlHttpRequest
  695. * });
  696. * //数据字典的值变为
  697. * {
  698. * "category": [
  699. * {
  700. * "enable": true,
  701. * "sequence": 1.0,
  702. * "text": "公司公告",
  703. * "value": "company"
  704. * },
  705. * {
  706. * "enable": "false",
  707. * "sequence": 3.0,
  708. * "text": "部门公告",
  709. * "value": "department"
  710. * },
  711. * {
  712. * "text": "县级公告",
  713. * "value": "county"
  714. * }
  715. * ]
  716. * }
  717. *
  718. * dict.delete( "category.2");
  719. * //category是数组,只能删除最后一项也就是下标2
  720. * //数据字典的值变为
  721. * {
  722. * "category": [
  723. * {
  724. * "enable": true,
  725. * "sequence": 1.0,
  726. * "text": "公司公告",
  727. * "value": "company"
  728. * },
  729. * {
  730. * "enable": "false",
  731. * "sequence": 3.0,
  732. * "text": "部门公告",
  733. * "value": "department"
  734. * }
  735. * ]
  736. * }
  737. * @example
  738. * <caption>
  739. * 下面是错误的删除:
  740. * </caption>
  741. * dict.delete( "category_1" ); //出错,因为category_1在数据字典中不存在
  742. */
  743. this.Dict = MWF.xScript.createDict();
  744. //org
  745. var orgActions = null;
  746. var getOrgActions = function () {
  747. if (!orgActions) {
  748. MWF.require("MWF.xScript.Actions.UnitActions", null, false);
  749. orgActions = new MWF.xScript.Actions.UnitActions();
  750. }
  751. };
  752. var getNameFlag = function (name) {
  753. var t = typeOf(name);
  754. if (t === "array") {
  755. var v = [];
  756. name.each(function (id) {
  757. v.push((typeOf(id) === "object") ? (id.distinguishedName || id.id || id.unique || id.name) : id);
  758. });
  759. return v;
  760. } else {
  761. return [(t === "object") ? (name.distinguishedName || name.id || name.unique || name.name) : name];
  762. }
  763. };
  764. /**
  765. * 您可以通过this.org获取组织中的人员、人员属性、组织、组织属性、身份、群组和角色。
  766. * @module org
  767. * @o2cn 组织查询
  768. * @o2category web
  769. * @o2ordernumber 100
  770. * @o2syntax
  771. * //您可以在流程表单、内容管理表单、门户页面、视图和查询视图中,通过this来获取当前实例的org对象,如下:
  772. * var org = this.org;
  773. */
  774. this.org = {
  775. //身份**********
  776. //获取身份
  777. /**
  778. 根据身份标识获取对应的身份对象或数组
  779. * @method getIdentity
  780. * @o2membercategory identity
  781. * @methodOf module:org
  782. * @static
  783. * @param {IdentityFlag|IdentityFlag[]} name - 身份的distinguishedName、id、unique属性值,身份对象,或上述属性值和对象的数组。
  784. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  785. * @return {Promise|IdentityData|IdentityData[]} 当async为true时,返回
  786. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  787. * 否则返回身份,单个是Object,多个是Array。
  788. * @o2ActionOut x_organization_assemble_express.IdentityAction.listObject|example=Identity|ignoreNoDescr=true|ignoreProps=[woUnitDutyList,woUnit,woGroupList]
  789. * @o2syntax
  790. * //同步执行,返回身份,单个是对象,多个是数组。
  791. * var identityList = this.org.getIdentity( name );
  792. *
  793. * //异步执行,返回Promise对象
  794. * var promise = this.org.getIdentity( name, true);
  795. * promise.then(function(identityList){
  796. * //identityList 为返回的身份,单个是对象,多个是数组。
  797. * })
  798. *
  799. * //异步执行,在回调方法中获取身份
  800. * this.org.getIdentity( name, function(identityList){
  801. * //identityList 为返回的身份,单个是对象,多个是数组。
  802. * })
  803. */
  804. getIdentity: function(name, async){
  805. getOrgActions();
  806. var data = {"identityList":getNameFlag(name)};
  807. var v = null;
  808. var cb = function(json){
  809. v = json.data;
  810. v = (v && v.length===1) ? v[0] : v;
  811. if (async && o2.typeOf(async)=="function") return async(v);
  812. return v;
  813. };
  814. var promise = orgActions.listIdentity(data, cb, null, !!async);
  815. return (!!async) ? promise : v;
  816. },
  817. //列出人员的身份
  818. /**
  819. * 根据人员标识获取对应的身份对象数组。
  820. * @method listIdentityWithPerson
  821. * @o2membercategory identity
  822. * @methodOf module:org
  823. * @static
  824. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  825. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  826. * @param {(Boolean)} [findCN] 是否需要额外查找中文名称(如张三),默认false。如果为true,除匹配unique和distingiushedName外,还会在身份的第一段中查找所有匹配到的身份(精确匹配)。
  827. * @return {Promise|IdentityData[]} 当async为true时,返回
  828. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  829. * 否则返回身份对象数组。
  830. * @o2ActionOut x_organization_assemble_express.IdentityAction.listWithPersonObject|example=Identity
  831. * @o2syntax
  832. * //同步执行,返回身份对象数组。
  833. * var identityList = this.org.listIdentityWithPerson( person );
  834. *
  835. * //异步执行,返回Promise对象
  836. * var promise = this.org.listIdentityWithPerson( person, true);
  837. * promise.then(function(identityList){
  838. * //identityList 返回的身份对象数组。
  839. * })
  840. *
  841. * //异步执行,在回调方法中获取
  842. * this.org.listIdentityWithPerson( person, function(identityList){
  843. * //identityList 返回的身份对象数组。
  844. * })
  845. */
  846. listIdentityWithPerson: function(name, async, findCN){
  847. getOrgActions();
  848. var data = {"personList":getNameFlag(name)};
  849. if( o2.typeOf(findCN) === "boolean"){
  850. data.useNameFind = findCN;
  851. }
  852. var v = null;
  853. var cb = function(json){
  854. v = json.data;
  855. if (async && o2.typeOf(async)=="function") return async(v);
  856. return v;
  857. };
  858. var promise = orgActions.listIdentityWithPerson(data, cb, null, !!async);
  859. return (!!async) ? promise : v;
  860. },
  861. //查询组织成员身份--返回身份的对象数组
  862. //nested 布尔 true嵌套的所有成员;false直接成员;默认false;
  863. /**
  864. * 根据组织标识获取对应的身份对象数组:identity对象数组。
  865. * @method listIdentityWithUnit
  866. * @o2membercategory identity
  867. * @methodOf module:org
  868. * @static
  869. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  870. * @param {Boolean} [nested] true嵌套的所有身份成员;false直接身份成员;默认false。
  871. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  872. * @return {Promise|IdentityData[]} 当async为true时,返回
  873. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  874. * 否则返回身份对象数组。
  875. * @o2ActionOut x_organization_assemble_express.IdentityAction.listWithUnitSubNestedObject|example=Identity
  876. * @o2syntax
  877. * //同步执行,返回直接组织身份对象数组。
  878. * var identityList = this.org.listIdentityWithUnit( unit );
  879. *
  880. *
  881. * //同步执行,返回嵌套组织身份对象数组。
  882. * var identityList = this.org.listIdentityWithUnit( unit, true );
  883. *
  884. * //异步执行,返回Promise对象
  885. * var promise = this.org.listIdentityWithUnit( unit, false, true);
  886. * promise.then(function(identityList){
  887. * //identityList 返回直接组织身份对象数组。
  888. * })
  889. *
  890. * //异步执行,在回调方法中获取
  891. * this.org.listIdentityWithUnit( unit, false, function(identityList){
  892. * //identityList 返回直接组织身份对象数组。
  893. * })
  894. */
  895. listIdentityWithUnit: function(name, nested, async){
  896. getOrgActions();
  897. var data = {"unitList": getNameFlag(name)};
  898. var v = null;
  899. // var cb = function(json){
  900. // v = json.data;
  901. // if (async && o2.typeOf(async)=="function") return async(v);
  902. // return v;
  903. // }.ag().catch(function(json){ return json; });
  904. var cb = function(json){
  905. v = json.data;
  906. if (async && o2.typeOf(async)=="function") return async(v);
  907. return v;
  908. };
  909. var method = (nested) ? "listIdentityWithUnitNested" : "listIdentityWithUnitDirect";
  910. var promise = orgActions[method](data, cb, null, !!async);
  911. promise.name = "org";
  912. //
  913. // if (nested){
  914. // orgActions.listIdentityWithUnitNested(data, cb, null, !!async);
  915. // }else{
  916. // orgActions.listIdentityWithUnitDirect(data, cb, null, !!async);
  917. // }
  918. return (!!async) ? promise : v;
  919. },
  920. //组织**********
  921. //获取组织
  922. /**
  923. 根据组织标识获取对应的组织:unit对象或数组
  924. * @method getUnit
  925. * @o2membercategory unit
  926. * @methodOf module:org
  927. * @static
  928. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  929. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  930. * @param {(Boolean)} [findCN] 是否需要额外查找中文名称(如综合部),默认false。如果为true,除匹配unique和distingiushedName外,还会在名称的第一段中查找所有匹配到的部门(精确匹配)。
  931. * @return {Promise|UnitData|UnitData[]} 当async为true时,返回
  932. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  933. * 否则返回组织,单个是Object,多个是Array。
  934. * @o2ActionOut x_organization_assemble_express.UnitAction.listObject|example=Unit
  935. * @o2syntax
  936. * //同步执行,返回组织,单个是对象,多个是数组。
  937. * var unitList = this.org.getUnit( name );
  938. *
  939. * //异步执行,返回Promise对象
  940. * var promise = this.org.getUnit( name, true);
  941. * promise.then(function(unitList){
  942. * //unitList 为返回的组织,单个是对象,多个是数组。
  943. * })
  944. *
  945. * //异步执行,在回调方法中获取组织
  946. * this.org.getUnit( name, function(unitList){
  947. * //unitList 为返回的组织,单个是对象,多个是数组。
  948. * })
  949. */
  950. getUnit: function(name, async, findCN){
  951. getOrgActions();
  952. var data = {"unitList":getNameFlag(name)};
  953. if( o2.typeOf(findCN) === "boolean"){
  954. data.useNameFind = findCN;
  955. }
  956. var v = null;
  957. var cb = function(json){
  958. v = json.data;
  959. v = (v && v.length===1) ? v[0] : v;
  960. if (async && o2.typeOf(async)=="function") return async(v);
  961. return v;
  962. };
  963. var promise = orgActions.listUnit(data, cb, null, !!async);
  964. return (!!async) ? promise : v;
  965. },
  966. //查询组织的下级--返回组织的对象数组
  967. //nested 布尔 true嵌套下级;false直接下级;默认false;
  968. /**
  969. 根据组织标识获取下级组织的对象数组:unit对象数组。
  970. * @method listSubUnit
  971. * @o2membercategory unit
  972. * @methodOf module:org
  973. * @static
  974. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  975. * @param {Boolean} [nested] true嵌套的所有下级组织;false直接下级组织;默认false。
  976. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  977. * @return {Promise|UnitData[]} 当async为true时,返回
  978. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  979. * 否则返回组织数组。
  980. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithUnitSubNestedObject|example=Unit
  981. * @o2syntax
  982. * //同步执行,返回嵌套下级组织数组。
  983. * var unitList = this.org.listSubUnit( name, true );
  984. *
  985. * //异步执行,返回Promise对象
  986. * var promise = this.org.listSubUnit( name, false, true);
  987. * promise.then(function(unitList){
  988. * //unitList 为返回的直接下级组织数组。
  989. * })
  990. *
  991. * //异步执行,在回调方法中获取
  992. * this.org.listSubUnit( name, true, function(unitList){
  993. * //unitList 为返回嵌套下级组织数组。
  994. * })
  995. */
  996. listSubUnit: function(name, nested, async){
  997. getOrgActions();
  998. var data = {"unitList": getNameFlag(name)};
  999. var v = null;
  1000. var cb = function(json){
  1001. v = json.data;
  1002. if (async && o2.typeOf(async)=="function") return async(v);
  1003. return v;
  1004. };
  1005. var promise;
  1006. if (nested){
  1007. promise = orgActions.listUnitSubNested(data, cb, null, !!async);
  1008. }else{
  1009. promise = orgActions.listUnitSubDirect(data, cb, null, !!async);
  1010. }
  1011. return (!!async) ? promise : v;
  1012. },
  1013. //查询组织的上级--返回组织的对象数组
  1014. //nested 布尔 true嵌套上级;false直接上级;默认false;
  1015. //async 布尔 true异步请求
  1016. /**
  1017. 根据组织标识批量获取上级组织的对象数组:unit对象数组。
  1018. * @method listSupUnit
  1019. * @o2membercategory unit
  1020. * @methodOf module:org
  1021. * @static
  1022. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  1023. * @param {Boolean} [nested] true嵌套的所有上级组织;false直接上级组织;默认false。
  1024. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1025. * @return {Promise|UnitData[]} 当async为true时,返回
  1026. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1027. * 否则返回组织数组。
  1028. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithUnitSupNestedObject|example=Unit
  1029. * @o2syntax
  1030. * //同步执行,返回嵌套上级组织数组。
  1031. * var unitList = this.org.listSupUnit( name, true );
  1032. *
  1033. * //异步执行,返回Promise对象
  1034. * var promise = this.org.listSupUnit( name, false, true);
  1035. * promise.then(function(unitList){
  1036. * //unitList 为返回的直接上级组织数组。
  1037. * })
  1038. *
  1039. * //异步执行,在回调方法中获取
  1040. * this.org.listSupUnit( name, true, function(unitList){
  1041. * //unitList 为返回嵌套上级组织数组。
  1042. * })
  1043. */
  1044. listSupUnit: function(name, nested, async){
  1045. getOrgActions();
  1046. var data = {"unitList": getNameFlag(name)};
  1047. var v = null;
  1048. var cb = function(json){
  1049. v = json.data;
  1050. if (async && o2.typeOf(async)=="function") return async(v);
  1051. return v;
  1052. };
  1053. var promise;
  1054. if (nested){
  1055. promise = orgActions.listUnitSupNested(data, cb, null, !!async);
  1056. }else{
  1057. promise = orgActions.listUnitSupDirect(data, cb, null, !!async);
  1058. }
  1059. return (!!async) ? promise : v;
  1060. // if (callback){
  1061. // if (nested){
  1062. // orgActions.listUnitSupNested(data, function(json){v = json.data; o2.runCallback(callback, "success", [v], this);});
  1063. // }else{
  1064. // orgActions.listUnitSupDirect(data, function(json){v = json.data; o2.runCallback(callback, "success", [v], this);});
  1065. // }
  1066. // }else{
  1067. // var v = null;
  1068. // if (nested){
  1069. // orgActions.listUnitSupNested(data, function(json){v = json.data;}, null, false);
  1070. // }else{
  1071. // orgActions.listUnitSupDirect(data, function(json){v = json.data;}, null, false);
  1072. // }
  1073. // return v;
  1074. // }
  1075. },
  1076. //根据个人身份获取组织
  1077. //flag 数字 表示获取第几层的组织
  1078. // 字符串 表示获取指定类型的组织
  1079. // 空 表示获取直接所在的组织
  1080. /**
  1081. 根据个人身份获取组织:unit对象或数组。
  1082. * @method getUnitByIdentity
  1083. * @o2membercategory unit
  1084. * @methodOf module:org
  1085. * @static
  1086. * @param {IdentityFlag} name - 身份的distinguishedName、id、unique属性值,身份对象。
  1087. * @param {String|Number} [flag] 当值为数字的时候, 表示获取第几层的组织。<br/> 当值为字符串的时候,表示获取指定类型的组织。<br/> 当值为空的时候,表示获取直接所在组织。
  1088. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1089. * @return {Promise|UnitData|UnitData[]} 当async为true时,返回
  1090. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1091. * 否则返回对应组织,单个为对象,多个为数组。
  1092. * @o2ActionOut x_organization_assemble_express.UnitAction.getWithIdentityWithLevelObject|example=Unit
  1093. * @o2syntax
  1094. * //同步执行,返回直接所在组织,单个为对象,多个为数组。
  1095. * var unitList = this.org.getUnitByIdentity( name );
  1096. *
  1097. * //同步执行,返回第一层组织,单个为对象,多个为数组。
  1098. * var unitList = this.org.getUnitByIdentity( name, 1 );
  1099. *
  1100. * * //同步执行,返回类型为company的组织,单个为对象,多个为数组。
  1101. * var unitList = this.org.getUnitByIdentity( name, "company" );
  1102. *
  1103. * //异步执行,返回Promise对象
  1104. * var promise = this.org.getUnitByIdentity( name, null, true);
  1105. * promise.then(function(unitList){
  1106. * //unitList 返回直接所在组织,单个为对象,多个为数组。
  1107. * })
  1108. *
  1109. * //异步执行,在回调方法中获取
  1110. * this.org.getUnitByIdentity( name, 1, function(unitList){
  1111. * //unitList 返回第一层组织,单个为对象,多个为数组。
  1112. * })
  1113. */
  1114. getUnitByIdentity: function(name, flag, async){
  1115. getOrgActions();
  1116. var getUnitMethod = "current";
  1117. var v;
  1118. if (flag){
  1119. if (typeOf(flag)==="string") getUnitMethod = "type";
  1120. if (typeOf(flag)==="number") getUnitMethod = "level";
  1121. }
  1122. var cb;
  1123. var promise;
  1124. switch (getUnitMethod){
  1125. case "current":
  1126. var data = {"identityList":getNameFlag(name)};
  1127. // var cb = ((async && o2.typeOf(async)=="function") ? (async.isAG ? async : async.ag()) : null) || function(json){
  1128. // v = json.data; v=(v&&v.length===1) ? v[0] : v; return v;
  1129. // }.ag().catch(function(json){ return json; });
  1130. cb = function(json){
  1131. v = json.data; v=(v&&v.length===1) ? v[0] : v;
  1132. if (async && o2.typeOf(async)=="function") return async(v);
  1133. return v;
  1134. };
  1135. promise = orgActions.listUnitWithIdentity(data, cb, null, !!async);
  1136. break;
  1137. case "type":
  1138. var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"type":flag};
  1139. cb = function(json){
  1140. v = json.data;
  1141. if (async && o2.typeOf(async)=="function") return async(v);
  1142. return v;
  1143. };
  1144. // var cb = ((async && o2.typeOf(async)=="function") ? (async.isAG ? async : async.ag()) : null) || function(json){
  1145. // v = json.data; return v;
  1146. // }.ag().catch(function(json){ return json; });
  1147. promise = orgActions.getUnitWithIdentityAndType(data, cb, null, !!async);
  1148. break;
  1149. case "level":
  1150. var data = {"identity":(typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name,"level":flag};
  1151. cb = function(json){
  1152. v = json.data; v=(v&&v.length===1) ? v[0] : v;
  1153. if (async && o2.typeOf(async)=="function") return async(v);
  1154. return v;
  1155. };
  1156. // var cb = ((async && o2.typeOf(async)=="function") ? (async.isAG ? async : async.ag()) : null) || function(json){
  1157. // v = json.data; return v;
  1158. // }.ag().catch(function(json){ return json; });
  1159. promise = orgActions.getUnitWithIdentityAndLevel(data, cb, null, !!async);
  1160. break;
  1161. }
  1162. return (!!async) ? promise : v;
  1163. },
  1164. //列出身份所在组织的所有上级组织
  1165. /**
  1166. * 批量查询身份所在的组织,并递归查找其上级组织对象.
  1167. * @method listAllSupUnitWithIdentity
  1168. * @o2membercategory unit
  1169. * @methodOf module:org
  1170. * @static
  1171. * @param {IdentityFlag|IdentityFlag[]} name - 身份的distinguishedName、id、unique属性值,身份对象,或上述属性值和对象的数组。
  1172. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1173. * @return {Promise|UnitData[]} 当async为true时,返回
  1174. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1175. * 否则返回组织数组。
  1176. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithIdentitySupNestedObject|example=Unit
  1177. * @o2syntax
  1178. * //同步执行,返回组织数组。
  1179. * var unitList = this.org.listAllSupUnitWithIdentity( name );
  1180. *
  1181. * //异步执行,返回Promise对象
  1182. * var promise = this.org.listAllSupUnitWithIdentity( name, true);
  1183. * promise.then(function(unitList){
  1184. * //unitList 返回组织数组。
  1185. * })
  1186. *
  1187. * //异步执行,在回调方法中获取
  1188. * this.org.listAllSupUnitWithIdentity( name, function(unitList){
  1189. * //unitList 返回组织数组。
  1190. * })
  1191. */
  1192. listAllSupUnitWithIdentity: function(name, async){
  1193. getOrgActions();
  1194. var data = {"identityList":getNameFlag(name)};
  1195. var v = null;
  1196. var cb = function(json){
  1197. v = json.data;
  1198. if (async && o2.typeOf(async)=="function") return async(v);
  1199. return v;
  1200. };
  1201. var promise = orgActions.listUnitSupNestedWithIdentity(data, cb, null, !!async);
  1202. return (!!async) ? promise : v;
  1203. },
  1204. //获取人员所在的所有组织
  1205. /**
  1206. * 根据个人标识批量获取组织对象成员:Unit对象数组。
  1207. * @method listUnitWithPerson
  1208. * @o2membercategory unit
  1209. * @methodOf module:org
  1210. * @static
  1211. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  1212. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1213. * @return {Promise|UnitData[]} 当async为true时,返回
  1214. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1215. * 否则返回组织数组。
  1216. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithPersonObject|example=Unit
  1217. * @o2syntax
  1218. * //同步执行,返回组织数组。
  1219. * var unitList = this.org.listUnitWithPerson( name );
  1220. *
  1221. * //异步执行,返回Promise对象
  1222. * var promise = this.org.listUnitWithPerson( name, true);
  1223. * promise.then(function(unitList){
  1224. * //unitList 返回组织数组。
  1225. * })
  1226. *
  1227. * //异步执行,在回调方法中获取
  1228. * this.org.listUnitWithPerson( name, function(unitList){
  1229. * //unitList 返回组织数组。
  1230. * })
  1231. */
  1232. listUnitWithPerson: function(name, async){
  1233. getOrgActions();
  1234. var data = {"personList":getNameFlag(name)};
  1235. var v = null;
  1236. var cb = function(json){
  1237. v = json.data;
  1238. if (async && o2.typeOf(async)=="function") return async(v);
  1239. return v;
  1240. };
  1241. var promise = orgActions.listUnitWithPerson(data, cb, null, !!async);
  1242. return (!!async) ? promise : v;
  1243. },
  1244. //列出人员所在组织的所有上级组织
  1245. /**
  1246. * 根据个人标识批量查询所在组织及所有上级组织:Unit对象数组。
  1247. * @method listAllSupUnitWithPerson
  1248. * @o2membercategory unit
  1249. * @methodOf module:org
  1250. * @static
  1251. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  1252. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1253. * @return {Promise|UnitData[]} 当async为true时,返回
  1254. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1255. * 否则返回个人所在组织及所有上级组织。
  1256. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithPersonSupNestedObject|example=Unit
  1257. * @o2syntax
  1258. * //同步执行,返回组织数组。
  1259. * var unitList = this.org.listAllSupUnitWithPerson( name );
  1260. *
  1261. * //异步执行,返回Promise对象
  1262. * var promise = this.org.listAllSupUnitWithPerson( name, true);
  1263. * promise.then(function(unitList){
  1264. * //unitList 返回组织数组。
  1265. * })
  1266. *
  1267. * //异步执行,在回调方法中获取
  1268. * this.org.listAllSupUnitWithPerson( name, function(unitList){
  1269. * //unitList 返回组织数组。
  1270. * })
  1271. */
  1272. listAllSupUnitWithPerson: function(name, async){
  1273. getOrgActions();
  1274. var data = {"personList":getNameFlag(name)};
  1275. var v = null;
  1276. var cb = function(json){
  1277. v = json.data;
  1278. if (async && o2.typeOf(async)=="function") return async(v);
  1279. return v;
  1280. };
  1281. var promise = orgActions.listUnitSupNestedWithPerson(data, cb, null, !!async);
  1282. return (!!async) ? promise : v;
  1283. },
  1284. //根据组织属性,获取所有符合的组织
  1285. /**
  1286. * 根据组织属性,获取所有符合的组织。
  1287. * @method listUnitWithAttribute
  1288. * @o2membercategory unit
  1289. * @methodOf module:org
  1290. * @static
  1291. * @param {String} attributeName 组织属性名称。
  1292. * @param {String} attributeValue 组织属性值。
  1293. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1294. * @return {Promise|UnitData[]} 当async为true时,返回
  1295. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1296. * 否则返回组织数组。
  1297. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithUnitAttributeObject|example=Unit
  1298. * @o2syntax
  1299. * //同步执行,返回组织数组。
  1300. * var unitList = this.org.listUnitWithAttribute( attributeName, attributeName );
  1301. *
  1302. * //异步执行,返回Promise对象
  1303. * var promise = this.org.listUnitWithAttribute( attributeName, attributeName, true);
  1304. * promise.then(function(unitList){
  1305. * //unitList 返回组织数组。
  1306. * })
  1307. *
  1308. * //异步执行,在回调方法中获取
  1309. * this.org.listUnitWithAttribute( attributeName, attributeName, function(unitList){
  1310. * //unitList 返回组织数组。
  1311. * })
  1312. */
  1313. listUnitWithAttribute: function(name, attribute, async){
  1314. getOrgActions();
  1315. var data = {"name":name,"attribute":attribute};
  1316. var v = null;
  1317. var cb = function(json){
  1318. v = json.data;
  1319. if (async && o2.typeOf(async)=="function") return async(v);
  1320. return v;
  1321. };
  1322. promise = orgActions.listUnitWithAttribute(data, cb, null, !!async);
  1323. return (!!async) ? promise : v;
  1324. },
  1325. //根据组织职务,获取所有符合的组织
  1326. /**
  1327. * 根据组织职务,获取所有符合的组织。
  1328. * @method listUnitWithDuty
  1329. * @o2membercategory unit
  1330. * @methodOf module:org
  1331. * @static
  1332. * @param {String} dutyName 组织职务名称。
  1333. * @param {IdentityFlag} identity 身份的distinguishedName、id、unique属性值,身份对象。
  1334. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1335. * @return {Promise|UnitData[]} 当async为true时,返回
  1336. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1337. * 否则返回组织数组。
  1338. * @o2ActionOut x_organization_assemble_express.UnitAction.listWithUnitDutyObject|example=Unit
  1339. * @o2syntax
  1340. * //同步执行,返回组织数组。
  1341. * var unitList = this.org.listUnitWithDuty( dutyName, identity );
  1342. *
  1343. * //异步执行,返回Promise对象
  1344. * var promise = this.org.listUnitWithDuty( dutyName, identity, true);
  1345. * promise.then(function(unitList){
  1346. * //unitList 返回组织数组。
  1347. * })
  1348. *
  1349. * //异步执行,在回调方法中获取
  1350. * this.org.listUnitWithDuty( dutyName, identity, function(unitList){
  1351. * //unitList 返回组织数组。
  1352. * })
  1353. */
  1354. listUnitWithDuty: function(name, id, async){
  1355. getOrgActions();
  1356. var data = {"name":name,"identity":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
  1357. var v = null;
  1358. var cb = function(json){
  1359. v = json.data;
  1360. if (async && o2.typeOf(async)=="function") return async(v);
  1361. return v;
  1362. };
  1363. var promise = orgActions.listUnitWithDuty(data, cb, null, !!async);
  1364. return (!!async) ? promise : v;
  1365. },
  1366. /**
  1367. * 列式所有顶层组织。
  1368. * @method listTopUnit
  1369. * @o2membercategory unit
  1370. * @methodOf module:org
  1371. * @static
  1372. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1373. * @return {Promise|UnitData[]} 当async为true时,返回
  1374. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1375. * 否则返回顶层组织数组。
  1376. * @o2ActionOut x_organization_assemble_express.UnitAction.listObject|example=Unit
  1377. * @o2syntax
  1378. * //同步执行,返回顶层组织数组。
  1379. * var unitList = this.org.listTopUnit();
  1380. *
  1381. * //异步执行,返回Promise对象
  1382. * var promise = this.org.listTopUnit(true);
  1383. * promise.then(function(unitList){
  1384. * //unitList 返回顶层组织数组。
  1385. * })
  1386. *
  1387. * //异步执行,在回调方法中获取
  1388. * this.org.listTopUnit(function(unitList){
  1389. * //unitList 返回顶层组织数组。
  1390. * })
  1391. */
  1392. listTopUnit: function(async){
  1393. var action = MWF.Actions.get("x_organization_assemble_control");
  1394. var v = null;
  1395. var cb = function(json){
  1396. v = json.data;
  1397. if (async && o2.typeOf(async)=="function") return async(v);
  1398. return v;
  1399. };
  1400. var promise = action.listTopUnit(cb, null, !!async);
  1401. return (!!async) ? promise : v;
  1402. },
  1403. //人员
  1404. //获取人员,附带身份,身份所在的组织,个人所在群组,个人拥有角色.
  1405. /**
  1406. 根据人员标识获取对应的人员对象,附带身份,身份所在的组织,个人所在群组,个人拥有角色.
  1407. * @method getPersonData
  1408. * @o2membercategory person
  1409. * @methodOf module:org
  1410. * @static
  1411. * @param {String} name - 人员的distinguishedName、id、unique属性值,人员名称。
  1412. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1413. * @return {Promise|PersonData} 当async为true时,返回
  1414. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1415. * 否则返回人员对象。
  1416. * @o2ActionOut x_organization_assemble_express.PersonAction.get|example=PersonData
  1417. * @o2syntax
  1418. * //同步执行,返回人员对象。
  1419. * var person = this.org.getPersonData( name );
  1420. *
  1421. * //异步执行,返回Promise对象
  1422. * var promise = this.org.getPersonData( name, true);
  1423. * promise.then(function(person){
  1424. * //personList 为返回的人员对象。
  1425. * })
  1426. *
  1427. * //异步执行,在回调方法中获取人员
  1428. * this.org.getPersonData( name, function(person){
  1429. * //personList 为返回的人员对象。
  1430. * })
  1431. */
  1432. getPersonData: function(name, async){
  1433. getOrgActions();
  1434. var v = null;
  1435. var cb = function(json){
  1436. v = json.data;
  1437. if (async && o2.typeOf(async)=="function") return async(v);
  1438. return v;
  1439. };
  1440. var promise = orgActions.getPerson(null, cb, null, !!async, {"flag": name});
  1441. return (!!async) ? promise : v;
  1442. },
  1443. //获取人员--返回人员的对象数组
  1444. /**
  1445. 根据人员标识获取对应的人员对象或数组:person对象或数组
  1446. * @method getPerson
  1447. * @o2membercategory person
  1448. * @methodOf module:org
  1449. * @static
  1450. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  1451. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1452. * @param {(Boolean)} [findCN] 是否需要额外查找中文名称(如张三),默认false。如果为true,除匹配unique和distingiushedName外,还会在名称的第一段中查找所有匹配到的人(精确匹配)。
  1453. * @return {Promise|PersonData|PersonData[]} 当async为true时,返回
  1454. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1455. * 否则返回人员,单个是Object,多个是Array。
  1456. * @o2ActionOut x_organization_assemble_express.PersonAction.listObject|example=Person
  1457. * @o2syntax
  1458. * //同步执行,返回人员,单个是对象,多个是数组。
  1459. * var personList = this.org.getPerson( name );
  1460. *
  1461. * //异步执行,返回Promise对象
  1462. * var promise = this.org.getPerson( name, true);
  1463. * promise.then(function(personList){
  1464. * //personList 为返回的人员,单个是对象,多个是数组。
  1465. * })
  1466. *
  1467. * //异步执行,在回调方法中获取人员
  1468. * this.org.getPerson( name, function(personList){
  1469. * //personList 为返回的人员,单个是对象,多个是数组。
  1470. * })
  1471. */
  1472. getPerson: function(name, async, findCN){
  1473. getOrgActions();
  1474. var data = {"personList": getNameFlag(name)};
  1475. if( o2.typeOf(findCN) === "boolean"){
  1476. data.useNameFind = findCN;
  1477. }
  1478. var v = null;
  1479. var cb = function(json){
  1480. v = json.data;
  1481. v = (v && v.length===1) ? v[0] : v;
  1482. if (async && o2.typeOf(async)=="function") return async(v);
  1483. return v;
  1484. };
  1485. var promise = orgActions.listPerson(data, cb, null, !!async);
  1486. return (!!async) ? promise : v;
  1487. // var v = null;
  1488. // orgActions.listPerson(data, function(json){v = json.data;}, null, false);
  1489. // return (v && v.length===1) ? v[0] : v;
  1490. },
  1491. //查询下级人员--返回人员的对象数组
  1492. //nested 布尔 true嵌套下级;false直接下级;默认false;
  1493. /**
  1494. 根据人员标识获取下级人员的对象数组:person对象数组。该上下级关系被人员的汇报对象值(superior)决定。
  1495. * @method listSubPerson
  1496. * @o2membercategory person
  1497. * @methodOf module:org
  1498. * @static
  1499. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  1500. * @param {Boolean} [nested] true嵌套的所有下级人员;false直接下级人员;默认false。
  1501. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1502. * @return {Promise|PersonData[]} 当async为true时,返回
  1503. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1504. * 否则返回人员数组。
  1505. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithPersonSubDirectObject|example=Person
  1506. * @o2syntax
  1507. * //同步执行,返回嵌套下级人员数组。
  1508. * var personList = this.org.listSubPerson( name, true );
  1509. *
  1510. * //异步执行,返回Promise对象
  1511. * var promise = this.org.listSubPerson( name, false, true);
  1512. * promise.then(function(personList){
  1513. * //personList 为返回的直接下级人员数组。
  1514. * })
  1515. *
  1516. * //异步执行,在回调方法中获取
  1517. * this.org.listSubPerson( name, true, function(personList){
  1518. * //personList 为返回嵌套下级人员数组。
  1519. * })
  1520. */
  1521. listSubPerson: function(name, nested, async){
  1522. getOrgActions();
  1523. var data = {"personList": getNameFlag(name)};
  1524. var v = null;
  1525. var cb = function(json){
  1526. v = json.data;
  1527. if (async && o2.typeOf(async)=="function") return async(v);
  1528. return v;
  1529. };
  1530. var promise;
  1531. if (nested){
  1532. promise = orgActions.listPersonSubNested(data, cb, null, !!async);
  1533. }else{
  1534. promise = orgActions.listPersonSubDirect(data, cb, null, !!async);
  1535. }
  1536. return (!!async) ? promise : v;
  1537. },
  1538. //查询上级人员--返回人员的对象数组
  1539. //nested 布尔 true嵌套上级;false直接上级;默认false;
  1540. /**
  1541. *根据人员标识获取上级人员的对象数组:person对象数组。该上下级关系被人员的汇报对象值(superior)决定。
  1542. * @method listSupPerson
  1543. * @o2membercategory person
  1544. * @methodOf module:org
  1545. * @static
  1546. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  1547. * @param {Boolean} [nested] true嵌套的所有上级人员;false直接上级人员;默认false。
  1548. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1549. * @return {Promise|PersonData[]} 当async为true时,返回
  1550. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1551. * 否则返回人员数组。
  1552. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithPersonSupDirectObject|example=Person
  1553. * @o2syntax
  1554. * //同步执行,返回嵌套上级人员数组。
  1555. * var personList = this.org.listSupPerson( name, true );
  1556. *
  1557. * //异步执行,返回Promise对象
  1558. * var promise = this.org.listSupPerson( name, false, true);
  1559. * promise.then(function(personList){
  1560. * //personList 为返回的直接上级人员数组。
  1561. * })
  1562. *
  1563. * //异步执行,在回调方法中获取
  1564. * this.org.listSupPerson( name, true, function(personList){
  1565. * //personList 为返回嵌套上级人员数组。
  1566. * })
  1567. */
  1568. listSupPerson: function(name, nested, async){
  1569. getOrgActions();
  1570. var data = {"personList": getNameFlag(name)};
  1571. var v = null;
  1572. var cb = function(json){
  1573. v = json.data;
  1574. if (async && o2.typeOf(async)=="function") return async(v);
  1575. return v;
  1576. };
  1577. var promise;
  1578. if (nested){
  1579. promise = orgActions.listPersonSupNested(data, cb, null, !!async);
  1580. }else{
  1581. promise = orgActions.listPersonSupDirect(data, cb, null, !!async);
  1582. }
  1583. return (!!async) ? promise : v;
  1584. },
  1585. //获取群组的所有人员--返回人员的对象数组
  1586. /**
  1587. * 根据群组标识获取人员对象成员:person对象数组。
  1588. * @method listPersonWithGroup
  1589. * @o2membercategory person
  1590. * @methodOf module:org
  1591. * @static
  1592. * @param {GroupFlag|GroupFlag[]} name - 群组的distinguishedName、name、id、unique属性值,群组对象,或上述属性值和对象的数组。
  1593. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1594. * @return {Promise|PersonData[]} 当async为true时,返回
  1595. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1596. * 否则返回人员对象数组。
  1597. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithGroupObject|example=Person
  1598. * @o2syntax
  1599. * //同步执行,返回人员数组。
  1600. * var personList = this.org.listPersonWithGroup( group );
  1601. *
  1602. * //异步执行,返回Promise对象
  1603. * var promise = this.org.listPersonWithGroup( group, true);
  1604. * promise.then(function(personList){
  1605. * //personList 为返回的人员数组。
  1606. * })
  1607. *
  1608. * //异步执行,在回调方法中获取
  1609. * this.org.listPersonWithGroup( group, function(personList){
  1610. * //personList 为返回的人员数组。
  1611. * })
  1612. */
  1613. listPersonWithGroup: function(name, async){
  1614. getOrgActions();
  1615. var data = {"groupList": getNameFlag(name)};
  1616. var v = null;
  1617. var cb = function(json){
  1618. v = json.data;
  1619. if (async && o2.typeOf(async)=="function") return async(v);
  1620. return v;
  1621. };
  1622. var promise = orgActions.listPersonWithGroup(data, cb, null, !!async);
  1623. return (!!async) ? promise : v;
  1624. },
  1625. //获取角色的所有人员--返回人员的对象数组
  1626. /**
  1627. * 根据角色标识获取人员对象数组:person对象数组。
  1628. * @method listPersonWithRole
  1629. * @o2membercategory person
  1630. * @methodOf module:org
  1631. * @static
  1632. * @param {RoleFlag|RoleFlag[]} name - 角色的distinguishedName、name、id、unique属性值,角色对象,或上述属性值和对象的数组。
  1633. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1634. * @return {Promise|PersonData[]} 当async为true时,返回
  1635. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1636. * 否则返回人员对象数组。
  1637. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithRoleObject|example=Person
  1638. * @o2syntax
  1639. * //同步执行,返回人员数组。
  1640. * var personList = this.org.listPersonWithRole( role );
  1641. *
  1642. * //异步执行,返回Promise对象
  1643. * var promise = this.org.listPersonWithRole( role, true);
  1644. * promise.then(function(personList){
  1645. * //personList 为返回的人员数组。
  1646. * })
  1647. *
  1648. * //异步执行,在回调方法中获取
  1649. * this.org.listPersonWithRole( role, function(personList){
  1650. * //personList 为返回的人员数组。
  1651. * })
  1652. */
  1653. listPersonWithRole: function(name, async){
  1654. getOrgActions();
  1655. var data = {"roleList": getNameFlag(name)};
  1656. var v = null;
  1657. var cb = function(json){
  1658. v = json.data;
  1659. if (async && o2.typeOf(async)=="function") return async(v);
  1660. return v;
  1661. };
  1662. var promise
  1663. promise = orgActions.listPersonWithRole(data, cb, null, !!async);
  1664. return (!!async) ? promise : v;
  1665. },
  1666. //获取身份的所有人员--返回人员的对象数组
  1667. /**
  1668. * 根据身份标识获取人员对象成员:person对象数组。
  1669. * @method listPersonWithIdentity
  1670. * @o2membercategory person
  1671. * @methodOf module:org
  1672. * @static
  1673. * @param {IdentityFlag|IdentityFlag[]} name - 身份的distinguishedName、id、unique属性值,身份对象,或上述属性值和对象的数组。
  1674. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1675. * @return {Promise|PersonData[]} 当async为true时,返回
  1676. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1677. * 否则返回人员对象数组。
  1678. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithIdentityObject|example=Person
  1679. * @o2syntax
  1680. * //同步执行,返回人员数组。
  1681. * var personList = this.org.listPersonWithIdentity( identity );
  1682. *
  1683. * //异步执行,返回Promise对象
  1684. * var promise = this.org.listPersonWithIdentity( identity, true);
  1685. * promise.then(function(personList){
  1686. * //personList 为返回的人员数组。
  1687. * })
  1688. *
  1689. * //异步执行,在回调方法中获取
  1690. * this.org.listPersonWithIdentity( identity, function(personList){
  1691. * //personList 为返回的人员数组。
  1692. * })
  1693. */
  1694. listPersonWithIdentity: function(name, async){
  1695. getOrgActions();
  1696. var data = {"identityList": getNameFlag(name)};
  1697. var v = null;
  1698. var cb = function(json){
  1699. v = json.data;
  1700. if (async && o2.typeOf(async)=="function") return async(v);
  1701. return v;
  1702. };
  1703. var promise = orgActions.listPersonWithIdentity(data, cb, null, !!async);
  1704. return (!!async) ? promise : v;
  1705. },
  1706. //获取身份的所有人员--返回人员的对象数组或人员对象
  1707. getPersonWithIdentity: function(name, async){
  1708. getOrgActions();
  1709. var data = {"identityList": getNameFlag(name)};
  1710. var v = null;
  1711. var cb = function(json){
  1712. v = json.data;
  1713. v = (v && v.length===1) ? v[0] : v;
  1714. if (async && o2.typeOf(async)=="function") return async(v);
  1715. return v;
  1716. };
  1717. var promise = orgActions.listPersonWithIdentity(data, cb, null, !!async);
  1718. return (!!async) ? promise : v;
  1719. },
  1720. //查询组织成员的人员--返回人员的对象数组
  1721. //nested 布尔 true嵌套的所有成员;false直接成员;默认false;
  1722. /**
  1723. * 根据组织标识获取人员对象成员:person对象数组。
  1724. * @method listPersonWithUnit
  1725. * @o2membercategory person
  1726. * @methodOf module:org
  1727. * @static
  1728. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  1729. * @param {Boolean} [nested] 是否嵌套获取组织以及下级组织的人员,true表示嵌套,flase表示获取直接组织。默认为false
  1730. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1731. * @return {Promise|PersonData[]} 当async为true时,返回
  1732. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1733. * 否则返回人员对象数组。
  1734. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithUnitSubDirectObject|example=Person
  1735. * @o2syntax
  1736. * //同步执行,返回组织的直接人员数组。
  1737. * var personList = this.org.listPersonWithUnit( unit );
  1738. *
  1739. * //同步执行,返回组织的以及嵌套下级组织所有的人员数组。
  1740. * var personList = this.org.listPersonWithUnit( unit, true );
  1741. *
  1742. * //异步执行,返回Promise对象
  1743. * var promise = this.org.listPersonWithUnit( unit, false, true);
  1744. * promise.then(function(personList){
  1745. * //personList 为返回的组织的直接人员数组。
  1746. * })
  1747. *
  1748. * //异步执行,在回调方法中获取
  1749. * this.org.listPersonWithUnit( unit, false, function(personList){
  1750. * //personList 为返回的群组的直接人员数组。
  1751. * })
  1752. */
  1753. listPersonWithUnit: function(name, nested, async){
  1754. getOrgActions();
  1755. var data = {"unitList": getNameFlag(name)};
  1756. var v = null;
  1757. var cb = function(json){
  1758. v = json.data;
  1759. if (async && o2.typeOf(async)=="function") return async(v);
  1760. return v;
  1761. };
  1762. var promise;
  1763. if (nested){
  1764. promise = orgActions.listPersonWithUnitNested(data, cb, null, !!async);
  1765. }else{
  1766. promise = orgActions.listPersonWithUnitDirect(data, cb, null, !!async);
  1767. }
  1768. return (!!async) ? promise : v;
  1769. },
  1770. //根据属性查询人员--返回人员的对象数组
  1771. //name string 属性名
  1772. //value string 属性值
  1773. /**
  1774. * 根据人员属性名称和属性值获取人员对象成员:person对象数组。
  1775. * @method listPersonWithAttribute
  1776. * @o2membercategory person
  1777. * @methodOf module:org
  1778. * @static
  1779. * @param {String} name 人员属性名称。
  1780. * @param {String} value 人员属性值。
  1781. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1782. * @return {Promise|PersonData[]} 当async为true时,返回
  1783. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1784. * 否则返回人员对象数组。
  1785. * @o2ActionOut x_organization_assemble_express.PersonAction.listWithPersonAttributeObject|example=Person
  1786. * @o2syntax
  1787. * //同步执行,返回拥有对应属性名和属性值人员数组。
  1788. * var personList = this.org.listPersonWithAttribute( name, value );
  1789. *
  1790. * //异步执行,返回Promise对象
  1791. * var promise = this.org.listPersonWithAttribute( name, value, true);
  1792. * promise.then(function(personList){
  1793. * //personList 返回拥有对应属性名和属性值人员数组。
  1794. * })
  1795. *
  1796. * //异步执行,在回调方法中获取
  1797. * this.org.listPersonWithAttribute( name, value, function(personList){
  1798. * //personList 返回拥有对应属性名和属性值人员数组。
  1799. * })
  1800. */
  1801. listPersonWithAttribute: function(name, value, async){
  1802. getOrgActions();
  1803. var data = {"name": name, "attribute": value};
  1804. var v = null;
  1805. var cb = function(json){
  1806. v = json.data;
  1807. if (async && o2.typeOf(async)=="function") return async(v);
  1808. return v;
  1809. };
  1810. var promise = orgActions.listPersonWithAttribute(data, cb, null, !!async);
  1811. return (!!async) ? promise : v;
  1812. },
  1813. //根据属性查询人员--返回人员的全称数组
  1814. //name string 属性名
  1815. //value string 属性值
  1816. listPersonNameWithAttribute: function(name, value, async){
  1817. getOrgActions();
  1818. var data = {"name": name, "attribute": value};
  1819. var v = null;
  1820. var cb = function(json){
  1821. v = json.data.personList;
  1822. if (async && o2.typeOf(async)=="function") return async(v);
  1823. return v;
  1824. };
  1825. var promise = orgActions.listPersonWithAttributeValue(data, cb, null, !!async);
  1826. return (!!async) ? promise : v;
  1827. },
  1828. //组织职务***********
  1829. //获取指定的组织职务的身份
  1830. /**
  1831. * 根据职务名称和组织名称获取身份。
  1832. * @method getDuty
  1833. * @o2membercategory duty
  1834. * @methodOf module:org
  1835. * @static
  1836. * @param {String} dutyName 组织职务名称。
  1837. * @param {UnitFlag} unit 组织的distinguishedName、id、unique属性值,组织对象。
  1838. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1839. * @return {Promise|IdentityData[]} 当async为true时,返回
  1840. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1841. * 否则返回身份数组。
  1842. * @o2ActionOut x_organization_assemble_express.UnitDutyAction.getWithUnitWithName|example=Identity
  1843. * @o2syntax
  1844. * //同步执行,返回身份数组。
  1845. * var identityList = this.org.getDuty( dutyName, unit );
  1846. *
  1847. * //异步执行,返回Promise对象
  1848. * var promise = this.org.getDuty( dutyName, unit, true);
  1849. * promise.then(function(identityList){
  1850. * //identityList 返回身份数组。
  1851. * })
  1852. *
  1853. * //异步执行,在回调方法中获取
  1854. * this.org.getDuty( dutyName, unit, function(unitList){
  1855. * //unitList 返回身份数组。
  1856. * })
  1857. */
  1858. getDuty: function(duty, id, async){
  1859. getOrgActions();
  1860. var data = {"name":duty,"unit":(typeOf(id)==="object") ? (id.distinguishedName || id.id || id.unique || id.name) : id};
  1861. var v = null;
  1862. var cb = function(json){
  1863. v = json.data;
  1864. if (async && o2.typeOf(async)=="function") return async(v);
  1865. return v;
  1866. };
  1867. var promise = orgActions.getDuty(data, cb, null, !!async);
  1868. return (!!async) ? promise : v;
  1869. },
  1870. //获取身份的所有职务名称
  1871. /**
  1872. * 批量获取身份的所有职务名称。
  1873. * @method listDutyNameWithIdentity
  1874. * @o2membercategory duty
  1875. * @methodOf module:org
  1876. * @static
  1877. * @param {IdentityFlag|IdentityFlag[]} identity - 身份的distinguishedName、id、unique属性值,身份对象,或上述属性值和对象的数组。
  1878. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1879. * @return {Promise|String[]} 当async为true时,返回
  1880. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1881. * 否则返回职务名称数组。
  1882. * @o2syntax
  1883. * //同步执行,返回职务名称数组。
  1884. * var dutyNameList = this.org.listDutyNameWithIdentity( identity );
  1885. *
  1886. * //异步执行,返回Promise对象
  1887. * var promise = this.org.listDutyNameWithIdentity( identity, true);
  1888. * promise.then(function(dutyNameList){
  1889. * //dutyNameList 返回职务名称数组。
  1890. * })
  1891. *
  1892. * //异步执行,在回调方法中获取
  1893. * this.org.listDutyNameWithIdentity( identity, function(dutyNameList){
  1894. * //dutyNameList 返回职务名称数组。
  1895. * })
  1896. */
  1897. listDutyNameWithIdentity: function(name, async){
  1898. getOrgActions();
  1899. var data = {"identityList":getNameFlag(name)};
  1900. var v = null;
  1901. var cb = function(json){
  1902. v = json.data.nameList;
  1903. if (async && o2.typeOf(async)=="function") return async(v);
  1904. return v;
  1905. };
  1906. var promise = orgActions.listDutyNameWithIdentity(data, cb, null, !!async);
  1907. return (!!async) ? promise : v;
  1908. },
  1909. //批量获取组织的所有职务名称
  1910. /**
  1911. * 批量获取组织的所有职务名称。
  1912. * @method listDutyNameWithUnit
  1913. * @o2membercategory duty
  1914. * @methodOf module:org
  1915. * @static
  1916. * @param {UnitFlag|UnitFlag[]} unit - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  1917. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1918. * @return {Promise|String[]} 当async为true时,返回
  1919. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1920. * 否则返回职务名称数组。
  1921. * @o2syntax
  1922. * //同步执行,返回职务名称数组。
  1923. * var dutyNameList = this.org.listDutyNameWithUnit( unit );
  1924. *
  1925. * //异步执行,返回Promise对象
  1926. * var promise = this.org.listDutyNameWithUnit( unit, true);
  1927. * promise.then(function(dutyNameList){
  1928. * //dutyNameList 返回职务名称数组。
  1929. * })
  1930. *
  1931. * //异步执行,在回调方法中获取
  1932. * this.org.listDutyNameWithUnit( unit, function(dutyNameList){
  1933. * //dutyNameList 返回职务名称数组。
  1934. * })
  1935. */
  1936. listDutyNameWithUnit: function(name, async){
  1937. getOrgActions();
  1938. var data = {"unitList":getNameFlag(name)};
  1939. var v = null;
  1940. var cb = function(json){
  1941. v = json.data.nameList;
  1942. if (async && o2.typeOf(async)=="function") return async(v);
  1943. return v;
  1944. };
  1945. var promise = orgActions.listDutyNameWithUnit(data, cb, null, !!async);
  1946. return (!!async) ? promise : v;
  1947. },
  1948. //获取组织的所有职务
  1949. /**
  1950. * 批量获取组织的所有职务。
  1951. * @method listUnitAllDuty
  1952. * @o2membercategory duty
  1953. * @methodOf module:org
  1954. * @static
  1955. * @param {UnitFlag|UnitFlag[]} unit - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  1956. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1957. * @return {Promise|Object[]} 当async为true时,返回
  1958. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  1959. * 否则返回职务数组
  1960. * @o2ActionOut x_organization_assemble_express.UnitDutyAction.listWithUnitObject|example=Duty
  1961. * @o2syntax
  1962. * //同步执行,返回职务数组。
  1963. * var dutyList = this.org.listUnitAllDuty( unit );
  1964. *
  1965. * //异步执行,返回Promise对象
  1966. * var promise = this.org.listUnitAllDuty( unit, true);
  1967. * promise.then(function(dutyList){
  1968. * //dutyList 返回职务数组。
  1969. * })
  1970. *
  1971. * //异步执行,在回调方法中获取
  1972. * this.org.listUnitAllDuty( unit, function(dutyList){
  1973. * //dutyList 返回职务数组。
  1974. * })
  1975. */
  1976. listUnitAllDuty: function(name, async){
  1977. getOrgActions();
  1978. var data = {"unitList":getNameFlag(name)};
  1979. var v = null;
  1980. var cb = function(json){
  1981. v = json.data;
  1982. if (async && o2.typeOf(async)=="function") return async(v);
  1983. return v;
  1984. };
  1985. var promise = orgActions.listUnitAllDuty(data, cb, null, !!async);
  1986. return (!!async) ? promise : v;
  1987. },
  1988. //群组***************
  1989. //获取群组--返回群组的对象数组
  1990. /**
  1991. 根据群组标识获取对应的群组对象或数组:group对象或数组
  1992. * @method getGroup
  1993. * @o2membercategory group
  1994. * @methodOf module:org
  1995. * @static
  1996. * @param {GroupFlag|GroupFlag[]} name - 群组的distinguishedName、name、id、unique属性值,群组对象,或上述属性值和对象的数组。
  1997. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  1998. * @return {Promise|GroupData|GroupData[]} 当async为true时,返回
  1999. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2000. * 否则返回群组,单个是Object,多个是Array。
  2001. * @o2ActionOut x_organization_assemble_express.GroupAction.listObject|example=Group
  2002. * @o2syntax
  2003. * //同步执行,返回群组,单个是Object,多个是Array。
  2004. * var groupList = this.org.getGroup( name );
  2005. *
  2006. * //异步执行,返回Promise对象
  2007. * var promise = this.org.getGroup( name, true);
  2008. * promise.then(function(groupList){
  2009. * //groupList 为返回的群组,单个是Object,多个是Array。
  2010. * })
  2011. *
  2012. * //异步执行,在回调方法中获取群组
  2013. * this.org.getGroup( name, function(groupList){
  2014. * //groupList 为返回的群组,单个是Object,多个是Array。
  2015. * })
  2016. */
  2017. getGroup: function(name, async){
  2018. getOrgActions();
  2019. var data = {"groupList": getNameFlag(name)};
  2020. var v = null;
  2021. var cb = function(json){
  2022. v = json.data;
  2023. v = (v && v.length===1) ? v[0] : v
  2024. if (async && o2.typeOf(async)=="function") return async(v);
  2025. return v;
  2026. };
  2027. var promise = orgActions.listGroup(data, cb, null, !!async);
  2028. return (!!async) ? promise : v;
  2029. // var v = null;
  2030. // orgActions.listGroup(data, function(json){v = json.data;}, null, false);
  2031. // return (v && v.length===1) ? v[0] : v;
  2032. },
  2033. //查询下级群组--返回群组的对象数组
  2034. //nested 布尔 true嵌套下级;false直接下级;默认false;
  2035. /**
  2036. 根据群组标识获取下级群组的对象数组:group对象数组。
  2037. * @method listSubGroup
  2038. * @o2membercategory group
  2039. * @methodOf module:org
  2040. * @static
  2041. * @param {GroupFlag|GroupFlag[]} name - 群组的distinguishedName、name、id、unique属性值,群组对象,或上述属性值和对象的数组。
  2042. * @param {Boolean} [nested] true嵌套的所有下级群组;false直接下级群组;默认false。
  2043. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2044. * @return {Promise|GroupData[]} 当async为true时,返回
  2045. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2046. * 否则返回群组数组。
  2047. * @o2ActionOut x_organization_assemble_express.GroupAction.listWithGroupSubDirectObject|example=Group
  2048. * @o2syntax
  2049. * //同步执行,返回嵌套下级群组数组。
  2050. * var groupList = this.org.listSubGroup( name, true );
  2051. *
  2052. * //异步执行,返回Promise对象
  2053. * var promise = this.org.listSubGroup( name, false, true);
  2054. * promise.then(function(groupList){
  2055. * //groupList 为返回的直接下级群组数组。
  2056. * })
  2057. *
  2058. * //异步执行,在回调方法中获取群组
  2059. * this.org.listSubGroup( name, true, function(groupList){
  2060. * //groupList 为返回嵌套下级群组数组。
  2061. * })
  2062. */
  2063. listSubGroup: function(name, nested, async){
  2064. getOrgActions();
  2065. var data = {"groupList": getNameFlag(name)};
  2066. var v = null;
  2067. // var cb = ((async && o2.typeOf(async)=="function") ? (async.isAG ? async : async.ag()) : null) || function(json){
  2068. // v = json.data;
  2069. // return v;
  2070. // }.ag().catch(function(json){ return json; });
  2071. var cb = function(json){
  2072. v = json.data;
  2073. if (async && o2.typeOf(async)=="function") return async(v);
  2074. return v;
  2075. };
  2076. var promise;
  2077. if (nested){
  2078. promise = orgActions.listSubGroupNested(data, cb, null, !!async);
  2079. }else{
  2080. promise = orgActions.listSubGroupDirect(data, cb, null, !!async);
  2081. }
  2082. return (!!async) ? promise : v;
  2083. // var v = null;
  2084. // if (nested){
  2085. // orgActions.listSubGroupNested(data, function(json){v = json.data;}, null, false);
  2086. // }else{
  2087. // orgActions.listSubGroupDirect(data, function(json){v = json.data;}, null, false);
  2088. // }
  2089. // return v;
  2090. },
  2091. //查询上级群组--返回群组的对象数组
  2092. //nested 布尔 true嵌套上级;false直接上级;默认false;
  2093. /**
  2094. 根据群组标识获取上级群组的对象数组:group对象数组。
  2095. * @method listSupGroup
  2096. * @o2membercategory group
  2097. * @methodOf module:org
  2098. * @static
  2099. * @param {GroupFlag|GroupFlag[]} name - 群组的distinguishedName、name、id、unique属性值,群组对象,或上述属性值和对象的数组。
  2100. * @param {Boolean} [nested] true嵌套的所有上级群组;false直接上级群组;默认false。
  2101. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2102. * @return {Promise|GroupData[]} 当async为true时,返回
  2103. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2104. * 否则返回群组数组。
  2105. * @o2ActionOut x_organization_assemble_express.GroupAction.listWithGroupSupDirectObject|example=Group
  2106. * @o2syntax
  2107. * //同步执行,返回嵌套上级群组数组。
  2108. * var groupList = this.org.listSupGroup( name, true );
  2109. *
  2110. * //异步执行,返回Promise对象
  2111. * var promise = this.org.listSupGroup( name, false, true);
  2112. * promise.then(function(groupList){
  2113. * //groupList 为返回的直接上级群组数组。
  2114. * })
  2115. *
  2116. * //异步执行,在回调方法中获取群组
  2117. * this.org.listSupGroup( name, true, function(groupList){
  2118. * //groupList 为返回嵌套上级群组数组。
  2119. * })
  2120. */
  2121. listSupGroup:function(name, nested, async){
  2122. getOrgActions();
  2123. var data = {"groupList": getNameFlag(name)};
  2124. var v = null;
  2125. var cb = function(json){
  2126. v = json.data;
  2127. if (async && o2.typeOf(async)=="function") return async(v);
  2128. return v;
  2129. };
  2130. var promise
  2131. if (nested){
  2132. var promise = orgActions.listSupGroupNested(data, cb, null, !!async);
  2133. }else{
  2134. var promise = orgActions.listSupGroupDirect(data, cb, null, !!async);
  2135. }
  2136. return (!!async) ? promise : v;
  2137. // var v = null;
  2138. // if (nested){
  2139. // orgActions.listSupGroupNested(data, function(json){v = json.data;}, null, false);
  2140. // }else{
  2141. // orgActions.listSupGroupDirect(data, function(json){v = json.data;}, null, false);
  2142. // }
  2143. // return v;
  2144. },
  2145. //人员所在群组(嵌套)--返回群组的对象数组
  2146. /**
  2147. * 根据人员标识获取所有的群组对象数组。如果群组具有群组(group)成员,且群组成员中包含该人员,那么该群组也被返回。
  2148. * @method listGroupWithPerson
  2149. * @o2membercategory group
  2150. * @methodOf module:org
  2151. * @static
  2152. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  2153. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2154. * @return {Promise|GroupData[]} 当async为true时,返回
  2155. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2156. * 否则返回群组对象数组。
  2157. * @o2ActionOut x_organization_assemble_express.GroupAction.listWithPersonObject|example=Group
  2158. * @o2syntax
  2159. * //同步执行,返回群组数组。
  2160. * var groupList = this.org.listGroupWithPerson( name );
  2161. *
  2162. * //异步执行,返回Promise对象
  2163. * var promise = this.org.listGroupWithPerson( name, true);
  2164. * promise.then(function(groupList){
  2165. * //groupList 为返回的群组数组。
  2166. * })
  2167. *
  2168. * //异步执行,在回调方法中获取群组
  2169. * this.org.listGroupWithPerson( name, function(groupList){
  2170. * //groupList 为返回的群组数组。
  2171. * })
  2172. */
  2173. listGroupWithPerson:function(name, async){
  2174. getOrgActions();
  2175. var data = {"personList": getNameFlag(name)};
  2176. var v = null;
  2177. var cb = function(json){
  2178. v = json.data;
  2179. if (async && o2.typeOf(async)=="function") return async(v);
  2180. return v;
  2181. };
  2182. var promise = orgActions.listGroupWithPerson(data, cb, null, !!async);
  2183. return (!!async) ? promise : v;
  2184. // var v = null;
  2185. // orgActions.listGroupWithPerson(data, function(json){v = json.data;}, null, false);
  2186. // return v;
  2187. },
  2188. //身份所在群组(嵌套)--返回群组的对象数组
  2189. /**
  2190. * 根据身份标识获取所有的群组对象数组。如果群组具有群组(group)成员,且群组成员中包含该身份,那么该群组也被返回。
  2191. * @method listGroupWithIdentity
  2192. * @o2membercategory group
  2193. * @methodOf module:org
  2194. * @static
  2195. * @param {IdentityFlag|IdentityFlag[]} identity - 身份的distinguishedName、id、unique属性值,身份对象,或上述属性值和对象的数组。
  2196. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2197. * @return {Promise|GroupData[]} 当async为true时,返回
  2198. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2199. * 否则返回群组对象数组。
  2200. * @o2ActionOut x_organization_assemble_express.GroupAction.listWithPersonObject|example=Group
  2201. * @o2syntax
  2202. * //同步执行,返回群组数组。
  2203. * var groupList = this.org.listGroupWithIdentity( identity );
  2204. *
  2205. * //异步执行,返回Promise对象
  2206. * var promise = this.org.listGroupWithIdentity( identity, true);
  2207. * promise.then(function(groupList){
  2208. * //groupList 为返回的群组数组。
  2209. * })
  2210. *
  2211. * //异步执行,在回调方法中获取群组
  2212. * this.org.listGroupWithPerson( identity, function(groupList){
  2213. * //groupList 为返回的群组数组。
  2214. * })
  2215. */
  2216. listGroupWithIdentity:function(identity, async){
  2217. getOrgActions();
  2218. var data = {"identityList": getNameFlag(identity)};
  2219. var v = null;
  2220. var cb = function(json){
  2221. v = json.data;
  2222. if (async && o2.typeOf(async)=="function") return async(v);
  2223. return v;
  2224. };
  2225. var promise = orgActions.listGroupWithIdentity(data, cb, null, !!async);
  2226. return (!!async) ? promise : v;
  2227. },
  2228. //角色***************
  2229. //获取角色--返回角色的对象数组
  2230. /**
  2231. * 根据角色标识获取对应的角色对象或数组。
  2232. * @method getRole
  2233. * @o2membercategory role
  2234. * @methodOf module:org
  2235. * @static
  2236. * @param {RoleFlag|RoleFlag[]} name - 角色的distinguishedName、name、id、unique属性值,角色对象;或上述属性值和对象的数组。
  2237. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2238. * @return {Promise|RoleData|RoleData[]} 当async为true时,返回
  2239. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2240. * 否则返回角色,单个为Object,多个为Array。
  2241. * @o2ActionOut x_organization_assemble_express.RoleAction.listObject|example=Role
  2242. * @o2syntax
  2243. * //同步执行,返回角色,单个为对象,多个为数组。
  2244. * var roleList = this.org.getRole( name );
  2245. *
  2246. * //异步执行,返回Promise对象
  2247. * var promise = this.org.getRole( name, true);
  2248. * promise.then(function(roleList){
  2249. * //roleList 为返回的角色,单个为对象,多个为数组。
  2250. * })
  2251. *
  2252. * //异步执行,在回调方法中获取角色,单个为对象,多个为数组
  2253. * this.org.getRole( name, function(roleList){
  2254. * //roleList 为返回判断结果。
  2255. * })
  2256. */
  2257. getRole: function(name, async){
  2258. getOrgActions();
  2259. var data = {"roleList": getNameFlag(name)};
  2260. var v = null;
  2261. var cb = function(json){
  2262. v = json.data;
  2263. v = (v && v.length===1) ? v[0] : v;
  2264. if (async && o2.typeOf(async)=="function") return async(v);
  2265. return v;
  2266. };
  2267. var promise = orgActions.listRole(data, cb, null, !!async);
  2268. return (!!async) ? promise : v;
  2269. // var v = null;
  2270. // orgActions.listRole(data, function(json){v = json.data;}, null, false);
  2271. // return (v && v.length===1) ? v[0] : v;
  2272. },
  2273. //人员所有角色(嵌套)--返回角色的对象数组
  2274. /**
  2275. * 根据人员标识获取所有的角色对象数组。如果角色具有群组(group)成员,且群组中包含该人员,那么该角色也被返回。
  2276. * @method listRoleWithPerson
  2277. * @o2membercategory role
  2278. * @methodOf module:org
  2279. * @static
  2280. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  2281. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2282. * @return {Promise|RoleData[]} 当async为true时,返回
  2283. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2284. * 否则返回角色对象数组。
  2285. * @o2ActionOut x_organization_assemble_express.RoleAction.listWithPersonObject|example=Role
  2286. * @o2syntax
  2287. * //同步执行,返回角色数组。
  2288. * var roleList = this.org.listRoleWithPerson( name );
  2289. *
  2290. * //异步执行,返回Promise对象
  2291. * var promise = this.org.listRoleWithPerson( name, true);
  2292. * promise.then(function(roleList){
  2293. * //roleList 为返回的角色数组。
  2294. * })
  2295. *
  2296. * //异步执行,在回调方法中获取角色
  2297. * this.org.listRoleWithPerson( name, function(roleList){
  2298. * //roleList 为返回的角色数组。
  2299. * })
  2300. */
  2301. listRoleWithPerson:function(name, async){
  2302. getOrgActions();
  2303. var data = {"personList": getNameFlag(name)};
  2304. var v = null;
  2305. var cb = function(json){
  2306. v = json.data;
  2307. if (async && o2.typeOf(async)=="function") return async(v);
  2308. return v;
  2309. };
  2310. var promise = orgActions.listRoleWithPerson(data, cb, null, !!async);
  2311. return (!!async) ? promise : v;
  2312. // var v = null;
  2313. // orgActions.listRoleWithPerson(data, function(json){v = json.data;}, null, false);
  2314. // return v;
  2315. },
  2316. //人员***************
  2317. //人员是否拥有角色--返回true, false
  2318. /**
  2319. * 人员是否拥有角色。
  2320. * @method personHasRole
  2321. * @o2membercategory role
  2322. * @methodOf module:org
  2323. * @static
  2324. * @param {PersonFlag} name - 人员的distinguishedName、id、unique属性值,人员对象。
  2325. * @param {RoleFlag|RoleFlag[]} roleList - 角色的distinguishedName、name、id、unique属性值,角色对象;或上述属性值和对象的数组。
  2326. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2327. * @return {Promise|Boolean} 当async为true时,返回
  2328. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2329. * 否则如果人员拥有角色返回true, 否则返回false。
  2330. * @o2syntax
  2331. * //同步执行,返回判断结果。
  2332. * var flag = this.org.personHasRole( name, roleList );
  2333. *
  2334. * //异步执行,返回Promise对象
  2335. * var promise = this.org.personHasRole( name, roleList, true);
  2336. * promise.then(function(flag){
  2337. * //flag 为返回判断结果。
  2338. * })
  2339. *
  2340. * //异步执行,在回调方法中获取判断结果
  2341. * this.org.personHasRole( name, roleList, function(flag){
  2342. * //flag 为返回判断结果。
  2343. * })
  2344. */
  2345. personHasRole: function(name, role, async){
  2346. getOrgActions();
  2347. nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
  2348. var data = {"person":nameFlag,"roleList":getNameFlag(role)};
  2349. var v = false;
  2350. var cb = function(json){
  2351. v = json.data.value;
  2352. if (async && o2.typeOf(async)=="function") return async(v);
  2353. return v;
  2354. };
  2355. var promise = orgActions.personHasRole(data, cb, null, !!async);
  2356. return (!!async) ? promise : v;
  2357. // var v = false;
  2358. // orgActions.personHasRole(data, function(json){v = json.data.value;}, null, false);
  2359. // return v;
  2360. },
  2361. //群组是否拥有角色--返回true, false
  2362. /**
  2363. * 群组是否拥有角色。
  2364. * @method groupHasRole
  2365. * @o2membercategory role
  2366. * @methodOf module:org
  2367. * @static
  2368. * @param {GroupFlag} name - 群组的distinguishedName、name、id、unique属性值,群组对象。
  2369. * @param {RoleFlag|RoleFlag[]} roleList - 角色的distinguishedName、name、id、unique属性值,角色对象;或上述属性值和对象的数组。
  2370. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2371. * @return {Promise|Boolean} 当async为true时,返回
  2372. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2373. * 否则如果群组拥有角色返回true, 否则返回false。
  2374. * @o2syntax
  2375. * //同步执行,返回判断结果。
  2376. * var groupList = this.org.groupHasRole( name, roleList );
  2377. *
  2378. * //异步执行,返回Promise对象
  2379. * var promise = this.org.groupHasRole( name, roleList, true);
  2380. * promise.then(function(flag){
  2381. * //flag 为返回判断结果。
  2382. * })
  2383. *
  2384. * //异步执行,在回调方法中获取判断结果
  2385. * this.org.groupHasRole( name, roleList, function(flag){
  2386. * //flag 为返回判断结果。
  2387. * })
  2388. */
  2389. groupHasRole: function(name, role, async){
  2390. getOrgActions();
  2391. nameFlag = (typeOf(name)==="object") ? (name.distinguishedName || name.id || name.unique || name.name) : name;
  2392. var data = {"group":nameFlag,"roleList":getNameFlag(role)};
  2393. var v = false;
  2394. var cb = function(json){
  2395. v = json.data.value;
  2396. if (async && o2.typeOf(async)=="function") return async(v);
  2397. return v;
  2398. };
  2399. var promise = orgActions.groupHasRole(data, cb, null, !!async);
  2400. return (!!async) ? promise : v;
  2401. // var v = false;
  2402. // orgActions.groupHasRole(data, function(json){v = json.data.value;}, null, false);
  2403. // return v;
  2404. },
  2405. //人员属性************
  2406. //添加人员属性值(在属性中添加values值,如果没有此属性,则创建一个)
  2407. /**
  2408. * 添加人员属性值(在属性中添加values值,如果没有此属性,则创建一个)
  2409. * @method appendPersonAttribute
  2410. * @o2membercategory personAttribute
  2411. * @methodOf module:org
  2412. * @static
  2413. * @param {PersonFlag} person - 人员的distinguishedName、id、unique属性值,人员对象。
  2414. * @param {String} attr 属性名称。
  2415. * @param {String[]} values 属性值,必须为数组。
  2416. * @param {Function} [success] 执行成功的回调。
  2417. * @param {Function} [failure] 执行失败的回调。
  2418. * @param {(Boolean)} [async] 当参数为boolean,表示是否异步执行,默认为false。
  2419. * @o2syntax
  2420. * //同步执行
  2421. * this.org.appendPersonAttribute( person, attribute, valueArray);
  2422. *
  2423. * //异步执行
  2424. * this.org.appendPersonAttribute( person, attribute, valueArray, function(){
  2425. * //执行成功的回调
  2426. * }, null, true);
  2427. */
  2428. appendPersonAttribute: function(person, attr, values, success, failure, async){
  2429. getOrgActions();
  2430. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  2431. var data = {"attributeList":values,"name":attr,"person":personFlag};
  2432. var v = null;
  2433. var cb = function(json){
  2434. v = json.data;
  2435. if (async && o2.typeOf(async)=="function") return async(v);
  2436. return v;
  2437. };
  2438. var promise = orgActions.appendPersonAttribute(data, cb, null, !!async);
  2439. return (!!async) ? promise : v;
  2440. // var cb = function(json){
  2441. // if (success) return success(json);
  2442. // }.ag().catch(function(xhr, text, error){
  2443. // if (failure) return failure(xhr, text, error);
  2444. // });
  2445. //
  2446. // orgActions.appendPersonAttribute(data, cb, null, !!async);
  2447. },
  2448. //设置人员属性值(将属性值修改为values,如果没有此属性,则创建一个)
  2449. /**
  2450. * 设置人员属性值(将属性值修改为values,如果没有此属性,则创建一个)
  2451. * @method setPersonAttribute
  2452. * @o2membercategory personAttribute
  2453. * @methodOf module:org
  2454. * @static
  2455. * @param {PersonFlag} person - 人员的distinguishedName、id、unique属性值,人员对象。
  2456. * @param {String} attr 属性名称。
  2457. * @param {String[]} values 属性值,必须为数组。
  2458. * @param {Function} [success] 执行成功的回调。
  2459. * @param {Function} [failure] 执行失败的回调。
  2460. * @param {(Boolean)} [async] 当参数为boolean,表示是否异步执行,默认为false。
  2461. * @o2syntax
  2462. * //同步执行
  2463. * this.org.setPersonAttribute( person, attribute, valueArray);
  2464. *
  2465. * //异步执行
  2466. * this.org.setPersonAttribute( person, attribute, valueArray, function(){
  2467. * //执行成功的回调
  2468. * }, null, true);
  2469. */
  2470. setPersonAttribute: function(person, attr, values, success, failure, async){
  2471. getOrgActions();
  2472. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  2473. var data = {"attributeList":values,"name":attr,"person":personFlag};
  2474. var v = null;
  2475. var cb = function(json){
  2476. v = json.data;
  2477. if (async && o2.typeOf(async)=="function") return async(v);
  2478. return v;
  2479. };
  2480. var promise = orgActions.setPersonAttribute(data, cb, null, !!async);
  2481. return (!!async) ? promise : v;
  2482. // var cb = function(json){
  2483. // if (success) return success(json);
  2484. // }.ag().catch(function(xhr, text, error){
  2485. // if (failure) return failure(xhr, text, error);
  2486. // });
  2487. //
  2488. // orgActions.setPersonAttribute(data, cb, null, !!async);
  2489. },
  2490. //获取人员属性值
  2491. /**
  2492. 根据人员和属性名称获取属性值数组。
  2493. * @method getPersonAttribute
  2494. * @o2membercategory personAttribute
  2495. * @methodOf module:org
  2496. * @static
  2497. * @param {PersonFlag} person - 人员的distinguishedName、id、unique属性值,人员对象。
  2498. * @param {String} attr 属性名称。
  2499. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2500. * @return {String[]} 当async为true时,返回
  2501. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2502. * 否则返回属性值数组,
  2503. * 如:<pre><code class='language-js'>[ value1, value2 ]</code></pre>
  2504. * @o2syntax
  2505. * //同步执行,返回该人员的属性值数组。
  2506. * var attributeList = this.org.getPersonAttribute( person, attr );
  2507. *
  2508. * //异步执行,返回Promise对象
  2509. * var promise = this.org.getPersonAttribute( person, attr, true);
  2510. * promise.then(function(attributeList){
  2511. * //attributeList 为返回该人员的属性值数组。
  2512. * })
  2513. *
  2514. * //异步执行,在回调方法中获取
  2515. * this.org.getPersonAttribute( person, attr, function(attributeList){
  2516. * //attributeList 为返回该人员的属性值数组。
  2517. * })
  2518. */
  2519. getPersonAttribute: function(person, attr, async){
  2520. getOrgActions();
  2521. var personFlag = (typeOf(person)==="object") ? (person.distinguishedName || person.id || person.unique || person.name) : person;
  2522. var data = {"name":attr,"person":personFlag};
  2523. var v = null;
  2524. var cb = function(json){
  2525. v = json.data.attributeList;
  2526. if (async && o2.typeOf(async)=="function") return async(v);
  2527. return v;
  2528. };
  2529. var promise = orgActions.getPersonAttribute(data, cb, null, !!async);
  2530. return (!!async) ? promise : v;
  2531. },
  2532. //列出人员所有属性的名称
  2533. /**
  2534. 列出人员所有属性的名称数组。
  2535. * @method listPersonAttributeName
  2536. * @o2membercategory personAttribute
  2537. * @methodOf module:org
  2538. * @static
  2539. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  2540. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2541. * @return {String[]} 当async为true时,返回
  2542. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2543. * 否则返回人员属性名称数组,
  2544. * 如:<pre><code class='language-js'>[ attributeName1, attributeName2 ]</code></pre>
  2545. * @o2syntax
  2546. * //同步执行,返回人员所有属性的名称数组。
  2547. * var attributeNameList = this.org.listPersonAttributeName( person );
  2548. *
  2549. * //异步执行,返回Promise对象
  2550. * var promise = this.org.listPersonAttributeName( person, true);
  2551. * promise.then(function(attributeNameList){
  2552. * //attributeNameList 为人员所有属性的名称数组。
  2553. * })
  2554. *
  2555. * //异步执行,在回调方法中获取
  2556. * this.org.listPersonAttributeName( person, function(attributeNameList){
  2557. * //attributeNameList 为人员所有属性的名称数组。
  2558. * })
  2559. */
  2560. listPersonAttributeName: function(name, async){
  2561. getOrgActions();
  2562. var data = {"personList":getNameFlag(name)};
  2563. var v = null;
  2564. var cb = function(json){
  2565. v = json.data.nameList;
  2566. if (async && o2.typeOf(async)=="function") return async(v);
  2567. return v;
  2568. };
  2569. var promise = orgActions.listPersonAttributeName(data, cb, null, !!async);
  2570. return (!!async) ? promise : v;
  2571. },
  2572. //列出人员的所有属性
  2573. /**
  2574. 列出人员的所有属性对象数组。
  2575. * @method listPersonAllAttribute
  2576. * @o2membercategory personAttribute
  2577. * @methodOf module:org
  2578. * @static
  2579. * @param {PersonFlag|PersonFlag[]} name - 人员的distinguishedName、id、unique属性值,人员对象,或上述属性值和对象的数组。
  2580. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2581. * @return {Object[]} 当async为true时,返回
  2582. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2583. * 否则返回人员属性对象数组,如:
  2584. * <pre><code class='language-js'>[{
  2585. * "name": "住址",
  2586. * "person": "张三@zhangsan@P",
  2587. * "attributeList": [
  2588. * "杭州市","绍兴市"
  2589. * ]
  2590. * }]</code></pre>
  2591. * @o2syntax
  2592. * //同步执行,返回人员所有属性的对象数组。
  2593. * var attributeObjectList = this.org.listPersonAllAttribute( person );
  2594. *
  2595. * //异步执行,返回Promise对象
  2596. * var promise = this.org.listPersonAllAttribute( person, true);
  2597. * promise.then(function(attributeObjectList){
  2598. * //attributeObjectList 为人员所有属性的对象数组。
  2599. * })
  2600. *
  2601. * //异步执行,在回调方法中获取
  2602. * this.org.listPersonAllAttribute( person, function(attributeObjectList){
  2603. * //attributeObjectList 为人员所有属性的对象数组。
  2604. * })
  2605. */
  2606. listPersonAllAttribute: function(name, async){
  2607. getOrgActions();
  2608. var data = {"personList":getNameFlag(name)};
  2609. var v = null;
  2610. var cb = function(json){
  2611. v = json.data;
  2612. if (async && o2.typeOf(async)=="function") return async(v);
  2613. return v;
  2614. };
  2615. var promise = orgActions.listPersonAllAttribute(data, cb, null, !!async);
  2616. return (!!async) ? promise : v;
  2617. },
  2618. //组织属性**************
  2619. //添加组织属性值(在属性中添加values值,如果没有此属性,则创建一个)
  2620. /**
  2621. * 添加组织属性值(在属性中添加values值,如果没有此属性,则创建一个)
  2622. * @method appendUnitAttribute
  2623. * @o2membercategory unitAttribute
  2624. * @methodOf module:org
  2625. * @static
  2626. * @param {UnitFlag} unit - 组织的distinguishedName、id、unique属性值,组织对象。
  2627. * @param {String} attribute 属性名称。
  2628. * @param {String[]} valueArray 属性值,必须为数组。
  2629. * @param {Function} [success] 执行成功的回调。
  2630. * @param {Function} [failure] 执行失败的回调。
  2631. * @param {(Boolean)} [async] 当参数为boolean,表示是否异步执行,默认为false。
  2632. * @o2syntax
  2633. * //同步执行
  2634. * this.org.appendUnitAttribute( unit, attribute, valueArray);
  2635. *
  2636. * //异步执行
  2637. * this.org.appendUnitAttribute( unit, attribute, valueArray, function(){
  2638. * //执行成功的回调
  2639. * }, null, true);
  2640. */
  2641. appendUnitAttribute: function(unit, attr, values, success, failure, async){
  2642. getOrgActions();
  2643. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  2644. var data = {"attributeList":values,"name":attr,"unit":unitFlag};
  2645. var v = null;
  2646. var cb = function(json){
  2647. v = json.data;
  2648. if (async && o2.typeOf(async)=="function") return async(v);
  2649. return v;
  2650. };
  2651. var promise = orgActions.appendUnitAttribute(data, cb, null, !!async);
  2652. return (!!async) ? promise : v;
  2653. // var cb = function(json){
  2654. // if (success) return success(json);
  2655. // }.ag().catch(function(xhr, text, error){
  2656. // if (failure) return failure(xhr, text, error);
  2657. // });
  2658. //
  2659. // orgActions.appendPersonAttribute(data, cb, null, !!async);
  2660. // orgActions.appendUnitAttribute(data, function(json){
  2661. // if (json.data.value){
  2662. // if (success) success();
  2663. // }else{
  2664. // if (failure) failure(null, "", "append values failed");
  2665. // }
  2666. // }, function(xhr, text, error){
  2667. // if (failure) failure(xhr, text, error);
  2668. // }, false);
  2669. },
  2670. //设置组织属性值(将属性值修改为values,如果没有此属性,则创建一个)
  2671. /**
  2672. * 设置组织属性值(将属性值修改为values,如果没有此属性,则创建一个)
  2673. * @method setUnitAttribute
  2674. * @o2membercategory unitAttribute
  2675. * @methodOf module:org
  2676. * @static
  2677. * @param {UnitFlag} unit - 组织的distinguishedName、id、unique属性值,组织对象。
  2678. * @param {String} attribute 属性名称。
  2679. * @param {String[]} valueArray 属性值,必须为数组。
  2680. * @param {Function} [success] 执行成功的回调。
  2681. * @param {Function} [failure] 执行失败的回调。
  2682. * @param {(Boolean)} [async] 当参数为boolean,表示是否异步执行,默认为false。
  2683. * @o2syntax
  2684. * //同步执行
  2685. * this.org.setUnitAttribute( unit, attribute, valueArray);
  2686. *
  2687. * //异步执行
  2688. * this.org.setUnitAttribute( unit, attribute, valueArray, function(){
  2689. * //执行成功的回调
  2690. * }, null, true);
  2691. */
  2692. setUnitAttribute: function(unit, attr, values, success, failure, async){
  2693. getOrgActions();
  2694. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  2695. var data = {"attributeList":values,"name":attr,"unit":unitFlag};
  2696. var v = null;
  2697. var cb = function(json){
  2698. v = json.data;
  2699. if (async && o2.typeOf(async)=="function") return async(v);
  2700. return v;
  2701. };
  2702. var promise = orgActions.setUnitAttribute(data, cb, null, !!async);
  2703. return (!!async) ? promise : v;
  2704. // var cb = function(json){
  2705. // if (success) return success(json);
  2706. // }.ag().catch(function(xhr, text, error){
  2707. // if (failure) return failure(xhr, text, error);
  2708. // });
  2709. // orgActions.setUnitAttribute(data, cb, null, !!async);
  2710. // orgActions.setUnitAttribute(data, function(json){
  2711. // if (json.data.value){
  2712. // if (success) success();
  2713. // }else{
  2714. // if (failure) failure(null, "", "append values failed");
  2715. // }
  2716. // }, function(xhr, text, error){
  2717. // if (failure) failure(xhr, text, error);
  2718. // }, false);
  2719. },
  2720. //获取组织属性值
  2721. /**
  2722. 根据组织标识和属性名称获取对应属性值。
  2723. * @method getUnitAttribute
  2724. * @o2membercategory unitAttribute
  2725. * @methodOf module:org
  2726. * @static
  2727. * @param {UnitFlag} unit - 组织的distinguishedName、id、unique属性值,组织对象。
  2728. * @param {String} attr 属性名称。
  2729. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2730. * @return {String[]} 当async为true时,返回
  2731. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2732. * 否则返回属性值数组,
  2733. * 如:<pre><code class='language-js'>[ value1, value2 ]</code></pre>
  2734. * @o2syntax
  2735. * //同步执行,返回该组织的属性值数组。
  2736. * var attributeList = this.org.getUnitAttribute( unit, attr );
  2737. *
  2738. * //异步执行,返回Promise对象
  2739. * var promise = this.org.getUnitAttribute( unit, attr, true);
  2740. * promise.then(function(attributeList){
  2741. * //attributeList 为返回该组织的属性值数组。
  2742. * })
  2743. *
  2744. * //异步执行,在回调方法中获取
  2745. * this.org.getUnitAttribute( unit, attr, function(attributeList){
  2746. * //attributeList 为返回该组织的属性值数组。
  2747. * })
  2748. */
  2749. getUnitAttribute: function(unit, attr, async){
  2750. getOrgActions();
  2751. var unitFlag = (typeOf(unit)==="object") ? (unit.distinguishedName || unit.id || unit.unique || unit.name) : unit;
  2752. var data = {"name":attr,"unit":unitFlag};
  2753. var v = null;
  2754. var cb = function(json){
  2755. v = json.data.attributeList;
  2756. if (async && o2.typeOf(async)=="function") return async(v);
  2757. return v;
  2758. };
  2759. var promise = orgActions.getUnitAttribute(data, cb, null, !!async);
  2760. return (!!async) ? promise : v;
  2761. },
  2762. //列出组织所有属性的名称
  2763. /**
  2764. 列出组织所有属性的名称数组。
  2765. * @method listUnitAttributeName
  2766. * @o2membercategory unitAttribute
  2767. * @methodOf module:org
  2768. * @static
  2769. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  2770. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2771. * @return {String[]} 当async为true时,返回
  2772. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2773. * 否则返回组织属性名称数组,
  2774. * 如:<pre><code class='language-js'>[ attributeName1, attributeName2 ]</code></pre>
  2775. * @o2syntax
  2776. * //同步执行,返回组织所有属性的名称数组。
  2777. * var attributeNameList = this.org.listUnitAttributeName( unit );
  2778. *
  2779. * //异步执行,返回Promise对象
  2780. * var promise = this.org.listUnitAttributeName( unit, true);
  2781. * promise.then(function(attributeNameList){
  2782. * //attributeNameList 为组织所有属性的名称数组。
  2783. * })
  2784. *
  2785. * //异步执行,在回调方法中获取
  2786. * this.org.listUnitAttributeName( unit, function(attributeNameList){
  2787. * //attributeNameList 为组织所有属性的名称数组。
  2788. * })
  2789. */
  2790. listUnitAttributeName: function(name, async){
  2791. getOrgActions();
  2792. var data = {"unitList":getNameFlag(name)};
  2793. var v = null;
  2794. var cb = function(json){
  2795. v = json.data.nameList;
  2796. if (async && o2.typeOf(async)=="function") return async(v);
  2797. return v;
  2798. };
  2799. var promise = orgActions.listUnitAttributeName(data, cb, null, !!async);
  2800. return (!!async) ? promise : v;
  2801. },
  2802. //列出组织的所有属性
  2803. /**
  2804. 列出组织的所有属性对象数组。
  2805. * @method listUnitAllAttribute
  2806. * @o2membercategory unitAttribute
  2807. * @methodOf module:org
  2808. * @static
  2809. * @param {UnitFlag|UnitFlag[]} name - 组织的distinguishedName、id、unique属性值,组织对象,或上述属性值和对象的数组。
  2810. * @param {(Boolean|Function)} [asyncOrCallback] 当参数为boolean,表示是否异步执行,默认为false。当参数为function,表示回调方法。
  2811. * @return {Object[]} 当async为true时,返回
  2812. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise}。
  2813. * 否则返回组织属性对象数组,如:
  2814. * <pre><code class='language-js'>[{
  2815. * "name": "部门类别",
  2816. * "unit": "开发部@kfb@U",
  2817. * "attributeList": [
  2818. * "生产部门",
  2819. * "二级部门"
  2820. * ]
  2821. * }]</code></pre>
  2822. * @o2syntax
  2823. * //同步执行,返回组织所有属性的对象数组。
  2824. * var attributeObjectList = this.org.listUnitAllAttribute( unit );
  2825. *
  2826. * //异步执行,返回Promise对象
  2827. * var promise = this.org.listUnitAllAttribute( unit, true);
  2828. * promise.then(function(attributeObjectList){
  2829. * //attributeObjectList 为组织所有属性的对象数组。
  2830. * })
  2831. *
  2832. * //异步执行,在回调方法中获取
  2833. * this.org.listUnitAllAttribute( unit, function(attributeObjectList){
  2834. * //attributeObjectList 为组织所有属性的对象数组。
  2835. * })
  2836. */
  2837. listUnitAllAttribute: function(name, async){
  2838. getOrgActions();
  2839. var data = {"unitList":getNameFlag(name)};
  2840. var v = null;
  2841. var cb = function(json){
  2842. v = json.data;
  2843. if (async && o2.typeOf(async)=="function") return async(v);
  2844. return v;
  2845. };
  2846. var promise = orgActions.listUnitAllAttribute(data, cb, null, !!async);
  2847. return (!!async) ? promise : v;
  2848. }
  2849. };
  2850. this.Action = (function () {
  2851. var actions = [];
  2852. return function (root, json) {
  2853. var action = actions[root] || (actions[root] = new MWF.xDesktop.Actions.RestActions("", root, ""));
  2854. action.getActions = function (callback) {
  2855. if (!this.actions) this.actions = {};
  2856. Object.merge(this.actions, json);
  2857. if (callback) callback();
  2858. };
  2859. this.invoke = function (option) {
  2860. action.invoke(option)
  2861. }
  2862. }
  2863. })();
  2864. // this.service = {
  2865. // "jaxwsClient": {},
  2866. // "jaxrsClient": {}
  2867. // };
  2868. var lookupAction = null;
  2869. var getLookupAction = function (callback) {
  2870. if (!lookupAction) {
  2871. MWF.require("MWF.xDesktop.Actions.RestActions", function () {
  2872. lookupAction = new MWF.xDesktop.Actions.RestActions("", "x_processplatform_assemble_surface", "");
  2873. lookupAction.getActions = function (actionCallback) {
  2874. this.actions = {
  2875. //"lookup": {"uri": "/jaxrs/view/flag/{view}/application/flag/{application}"},
  2876. //"getView": {"uri": "/jaxrs/view/{id}/design"}
  2877. "lookup": { "uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}/execute", "method": "PUT" },
  2878. "getView": { "uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}" }
  2879. };
  2880. if (actionCallback) actionCallback();
  2881. }
  2882. if (callback) callback();
  2883. });
  2884. } else {
  2885. if (callback) callback();
  2886. }
  2887. };
  2888. /**
  2889. * 您可以通过view对象,获取视图数据或选择视图数据。<br/>
  2890. * @module view
  2891. * @o2cn 视图执行
  2892. * @o2category web
  2893. * @o2ordernumber 70
  2894. * @o2syntax
  2895. * //您可以在流程表单、内容管理表单或门户页面中,通过this来获取view对象,如下:
  2896. * var view = this.view;
  2897. */
  2898. this.view = {
  2899. /**
  2900. * 获取指定视图的数据。
  2901. * @method lookup
  2902. * @static
  2903. * @param {Object} view - 要访问的视图信息。数据格式如下:<br/>
  2904. * <caption>以下的filter参数参考<a href='global.html#ViewFilter'>ViewFilter</a></caption>
  2905. * <pre><code class='language-js'>
  2906. * {
  2907. * "view" : "testView", //(String)必选,视图的名称、别名或ID
  2908. * "application" : "test数据中心应用", //(String)必选,视图所在数据应用的名称、别名或ID
  2909. * "filter": [ //(Array of Object)可选,对视图进行过滤的条件。json数组格式,每个数组元素描述一个过滤条件。
  2910. * {
  2911. * "logic":"and",
  2912. * "path":"$work.title",
  2913. * "comparison":"like",
  2914. * "value":"7月",
  2915. * "formatType":"textValue"
  2916. * }
  2917. * ]
  2918. * }
  2919. * </code></pre>
  2920. * @param {Function} callback - 访问成功后的回调函数
  2921. * @param {Boolean} [async] - 同步或异步调用。true:异步;false:同步。默认为true。
  2922. * @return {Promise} 返回Promise
  2923. * @o2syntax
  2924. * //通过回调方法获取数据
  2925. * this.view.lookup(view, callback, async);
  2926. *
  2927. * //返回Promise对象后处理
  2928. * var promise = this.view.lookup( view );
  2929. * promise.then(function(data){
  2930. * //data 为返回的数据。
  2931. * })
  2932. * @example
  2933. * //获取“财务管理”应用中“报销审批数据”视图中的数据
  2934. * //过滤条件为标题($work.title)包含包含(like))“7月”。
  2935. * this.view.lookup({
  2936. * "view": "报销审批数据",
  2937. * "application": "财务管理",
  2938. * "filter": [
  2939. * {
  2940. * "logic":"and",
  2941. * "path":"$work.title",
  2942. * "comparison":"like",
  2943. * "value":"7月",
  2944. * "formatType":"textValue"
  2945. * }
  2946. * ]
  2947. *}, function(data){
  2948. * var grid = data.grid; //得到过滤后的数据
  2949. * var groupGrid = data.groupGrid; //如果有分类,得到带分类的数据
  2950. * //......
  2951. *});
  2952. * @example
  2953. * //同上,通过返回值获取数据
  2954. * var promise = this.view.lookup({
  2955. * "view": "报销审批数据",
  2956. * "application": "财务管理",
  2957. * "filter": [
  2958. * {
  2959. * "logic":"and",
  2960. * "path":"$work.title",
  2961. * "comparison":"like",
  2962. * "value":"7月",
  2963. * "formatType":"textValue"
  2964. * }
  2965. * ]
  2966. *});
  2967. * promise.then(function(data){
  2968. * var grid = data.grid; //得到过滤后的数据
  2969. * var groupGrid = data.groupGrid; //如果有分类,得到带分类的数据
  2970. * //......
  2971. *})
  2972. * @example
  2973. * //获取“财务管理”应用中“报销审批数据”视图中的数据
  2974. * //过滤条件为标题($work.title)包含包含(like))“7月”,并且总金额大于500小于5000
  2975. * this.view.lookup({
  2976. * "view": "报销审批数据",
  2977. * "application": "财务管理",
  2978. * "filter": [
  2979. * {
  2980. * "logic":"and",
  2981. * "path":"$work.title",
  2982. * "comparison":"like",
  2983. * "value":"7月",
  2984. * "formatType":"textValue"
  2985. * },
  2986. * {
  2987. * "logic":"and",
  2988. * "path":"amount",
  2989. * "comparison":"range",
  2990. * "value":500,
  2991. * "otherValue":5000,
  2992. * "formatType":"numberValue"
  2993. * },
  2994. * ]
  2995. *}, function(data){
  2996. * var grid = data.grid; //得到过滤后的数据
  2997. * var groupGrid = data.groupGrid; //如果有分类,得到带分类的数据
  2998. * //......
  2999. *});
  3000. */
  3001. "lookup": function (view, callback, async) {
  3002. var filterList = { "filterList": (view.filter || null) };
  3003. return MWF.Actions.load("x_query_assemble_surface").ViewAction.executeWithQuery(view.view, view.application, filterList, function (json) {
  3004. var data = {
  3005. "grid": json.data.grid || json.data.groupGrid,
  3006. "groupGrid": json.data.groupGrid
  3007. };
  3008. if (callback) callback(data);
  3009. return data;
  3010. }, null, async);
  3011. },
  3012. "lookupV1": function (view, callback) {
  3013. getLookupAction(function () {
  3014. lookupAction.invoke({
  3015. "name": "lookup", "async": true, "parameter": { "view": view.view, "application": view.application }, "success": function (json) {
  3016. var data = {
  3017. "grid": json.data.grid,
  3018. "groupGrid": json.data.groupGrid
  3019. };
  3020. if (callback) callback(data);
  3021. }.bind(this)
  3022. });
  3023. }.bind(this));
  3024. },
  3025. /**
  3026. * 通过视图进行数据选择。
  3027. * @method select
  3028. * @static
  3029. * @param {Object} view - 要访问的视图信息。数据格式如下:<br/>
  3030. * <caption>以下的filter参数参考<a href='global.html#ViewFilter'>ViewFilter</a></caption>
  3031. * <pre><code class='language-js'>
  3032. * {
  3033. * "view" : "testView", //(String)必选,视图的名称、别名或ID
  3034. * "application" : "test数据中心应用", //(String)必选,视图所在数据应用的名称、别名或ID
  3035. * "isTitle" : true, //(Boolean)可选,是否显示视图标题。默认true
  3036. * "isMulti" : true, //(Boolean)可选,是否允许多选。默认true
  3037. * "width" : 700, //(Number)可选,选择框的宽度。默认700
  3038. * "height" : 400, //(Number)可选,选择框的高度。默认400
  3039. * "caption" : "标题", //(String)可选,选择框的标题
  3040. * "filter": [ //(Array of Object)可选,对视图进行过滤的条件。json数组格式,每个数组元素描述一个过滤条件。
  3041. * {
  3042. * "logic":"and",
  3043. * "path":"$work.title",
  3044. * "comparison":"like",
  3045. * "value":"7月",
  3046. * "formatType":"textValue"
  3047. * }
  3048. * ]
  3049. * }
  3050. * </code></pre>
  3051. * @param {Function} callback - 必选,当选择完成,点击“确定”之后的回调函数。
  3052. * @o2syntax
  3053. * this.view.select(view, callback);
  3054. * @example
  3055. * this.view.select({
  3056. * "application": "物业材料", //数据中心中的应用
  3057. * "view": "物业材料视图", //视图的名称
  3058. * "isMulti": false, //只允许单选
  3059. * }, function(items) {
  3060. * //如果选择了某个数据,将数据赋值给表单输入框
  3061. * if (items.length) {
  3062. * //物料名称,表单中输入框名为“materialName”, 视图中列的名称为“ylmc”
  3063. * this.data.materialName = items[0].data.ylmc;
  3064. * //规格,表单中输入框名为“specification”, 视图中列的名称为“gg”
  3065. * this.data.specification = items[0].data.gg;
  3066. * //单价,表单中输入框名为“price”, 视图中列的名称为“dj”
  3067. * this.data.price = items[0].data.dj;
  3068. * }
  3069. * }.bind(this));
  3070. */
  3071. "select": function (view, callback, options) {
  3072. if (view.view) {
  3073. var viewJson = {
  3074. "application": view.application || _form.json.application,
  3075. "viewName": view.view || "",
  3076. "isTitle": (view.isTitle === false) ? "no" : "yes",
  3077. "select": (view.isMulti === false) ? "single" : "multi",
  3078. "filter": view.filter
  3079. };
  3080. if (!options) options = {};
  3081. options.width = view.width;
  3082. options.height = view.height;
  3083. options.title = view.caption;
  3084. var width = options.width || "700";
  3085. var height = options.height || "400";
  3086. if (layout.mobile) {
  3087. var size = document.body.getSize();
  3088. width = size.x;
  3089. height = size.y;
  3090. options.style = "viewmobile";
  3091. }
  3092. width = width.toInt();
  3093. height = height.toInt();
  3094. var size = _form.app.content.getSize();
  3095. var x = (size.x - width) / 2;
  3096. var y = (size.y - height) / 2;
  3097. if (x < 0) x = 0;
  3098. if (y < 0) y = 0;
  3099. if (layout.mobile) {
  3100. x = 20;
  3101. y = 0;
  3102. }
  3103. var _self = this;
  3104. MWF.require("MWF.xDesktop.Dialog", function () {
  3105. var dlg = new MWF.xDesktop.Dialog({
  3106. "title": options.title || "select view",
  3107. "style": options.style || "view",
  3108. "top": y,
  3109. "left": x - 20,
  3110. "fromTop": y,
  3111. "fromLeft": x - 20,
  3112. "width": width,
  3113. "height": height,
  3114. "html": "<div style='height: 100%;'></div>",
  3115. "maskNode": _form.app.content,
  3116. "container": _form.app.content,
  3117. "buttonList": [
  3118. {
  3119. "text": MWF.LP.process.button.ok,
  3120. "action": function () {
  3121. //if (callback) callback(_self.view.selectedItems);
  3122. if (callback) callback(_self.view.getData());
  3123. this.close();
  3124. }
  3125. },
  3126. {
  3127. "text": MWF.LP.process.button.cancel,
  3128. "action": function () { this.close(); }
  3129. }
  3130. ]
  3131. });
  3132. dlg.show();
  3133. if (layout.mobile) {
  3134. var backAction = dlg.node.getElement(".MWF_dialod_Action_back");
  3135. var okAction = dlg.node.getElement(".MWF_dialod_Action_ok");
  3136. if (backAction) backAction.addEvent("click", function (e) {
  3137. dlg.close();
  3138. }.bind(this));
  3139. if (okAction) okAction.addEvent("click", function (e) {
  3140. //if (callback) callback(this.view.selectedItems);
  3141. if (callback) callback(this.view.getData());
  3142. dlg.close();
  3143. }.bind(this));
  3144. }
  3145. MWF.xDesktop.requireApp("query.Query", "Viewer", function () {
  3146. this.view = new MWF.xApplication.query.Query.Viewer(dlg.content.getFirst(), viewJson, { "style": "select" }, _form.app, _form.Macro);
  3147. }.bind(this));
  3148. }.bind(this));
  3149. }
  3150. }
  3151. };
  3152. /**
  3153. * 您可以通过statement对象,获取执行查询语句或者对查询结果进行选择。<br/>
  3154. * @module statement
  3155. * @o2cn 查询视图执行
  3156. * @o2category web
  3157. * @o2ordernumber 90
  3158. * @o2syntax
  3159. * //您可以在流程表单、内容管理表单、门户页面或视图中,通过this来获取statement对象,如下:
  3160. * var statement = this.statement;
  3161. */
  3162. this.statement = {
  3163. /**
  3164. * 执行指定的查询语句。
  3165. * @method execute
  3166. * @static
  3167. * @param {Object} statement - 要执行的查询语句的信息。数据格式如下:
  3168. * <div>以下的filter参数参考<a href='global.html#StatementFilter'>StatementFilter</a>,
  3169. * parameter参数参考<a href='global.html#StatementParameter'>StatementParameter</a></div>
  3170. * <pre><code class='language-js'>
  3171. * {
  3172. * "name" : "tesStatement", //(String)必选,查询配置的名称、别名或ID
  3173. * "mode" : "all", //(String)必选,“all”、“data”或者“count”,all表示同时执行查询语句和总数语句,data表示执行查询语句,count表示执行总数语句
  3174. * "page" : 1, //(number)可选,当前页码,默认为1
  3175. * "pageSize" : 20, //(number)可选,每页的数据条数,默认为20
  3176. * "filter": [ //(Array)可选,对查询进行过滤的条件。json数组格式,每个数组元素描述一个过滤条件,每个元素数据格式如下:
  3177. * {
  3178. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  3179. * "comparison":"like",
  3180. * "value":"关于",
  3181. * "formatType":"textValue"
  3182. * }
  3183. * ],
  3184. * parameter : {
  3185. * "person" : "", //参数名称为下列值时,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  3186. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  3187. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  3188. * "processName" : "test流程", //其他写确定的值
  3189. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  3190. * }
  3191. * }
  3192. * </code></pre>
  3193. * @param {Function} callback - 访问成功后的回调函数
  3194. * @param {Boolean} [async] - 同步或异步调用。true:异步;false:同步。默认为true。
  3195. * @return {Promise} 返回Promise
  3196. * @o2syntax
  3197. * this.statement.execute(statement, callback, async);
  3198. *
  3199. * //返回Promise对象后处理
  3200. * var promise = this.statement.execute( statement );
  3201. * promise.then(function(data){
  3202. * //data 为返回的数据。
  3203. * })
  3204. * @example
  3205. * //获取“task”查询中的数据
  3206. * //查询语句为 select o from Task o where (o.person = :person) and (o.startTime > :startTime) and (o.applicationName like :applicationName) and (o.processName = :processName)
  3207. * //总数语句为 select count(o.id) from Task o where (o.person = :person) and (o.startTime > :startTime) and (o.applicationName like :applicationName) and (o.processName = :processName)
  3208. * //过滤条件为标题o.title包含包含(like))“7月”。
  3209. * this.statement.execute({
  3210. * "name": "task",
  3211. * "mode" : "all",
  3212. * "filter": [
  3213. * {
  3214. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  3215. * "comparison":"like",
  3216. * "value":"7月",
  3217. * "formatType":"textValue"
  3218. * }
  3219. * ],
  3220. * "parameter" : {
  3221. * "person" : "", //参数名称为下列值时,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  3222. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  3223. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  3224. * "processName" : "test流程", //其他写确定的值
  3225. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  3226. * }
  3227. * }, function(json){
  3228. * var count = json.count; //总数语句执行后返回的数字
  3229. * var list = json.data; //查询语句后返回的数组
  3230. * //......
  3231. * });
  3232. * @example
  3233. * //同上,使用返回值接收参数
  3234. * var promise = this.statement.execute({
  3235. * "name": "task",
  3236. * "mode" : "all",
  3237. * "filter": [
  3238. * {
  3239. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  3240. * "comparison":"like",
  3241. * "value":"7月",
  3242. * "formatType":"textValue"
  3243. * }
  3244. * ],
  3245. * "parameter" : {
  3246. * "person" : "", //参数名称为下列值时,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  3247. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  3248. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  3249. * "processName" : "test流程", //其他写确定的值
  3250. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  3251. * }
  3252. * });
  3253. * promise.then(function(json){
  3254. * var count = json.count; //总数语句执行后返回的数字
  3255. * var list = json.data; //查询语句后返回的数组
  3256. * //......
  3257. * })
  3258. */
  3259. execute: function (obj, callback, async) {
  3260. if( obj.format ){
  3261. return this._execute(obj, callback, async, obj.format);
  3262. }else{
  3263. if( this.needCheckFormat(obj) ){
  3264. var result;
  3265. var p = MWF.Actions.load("x_query_assemble_surface").StatementAction.getFormat(obj.name, function(json){
  3266. result = this._execute(obj, callback, async, json.data.format);
  3267. return result;
  3268. }.bind(this), null, async);
  3269. return result || p;
  3270. }else{
  3271. return this._execute(obj, callback, async, "");
  3272. }
  3273. }
  3274. },
  3275. needCheckFormat: function(s){
  3276. if( s.format )return false;
  3277. if( typeOf(s.parameter) === "object" ){
  3278. for( var p in s.parameter ){
  3279. if( typeOf( s.parameter[p] ) === "date" )return true;
  3280. }
  3281. }
  3282. if( typeOf(s.filter) === "array" ){
  3283. for( var i=0; i< s.filter.length; i++){
  3284. var fType = s.filter[i].formatType;
  3285. if( ["dateTimeValue", "datetimeValue", "dateValue", "timeValue"].contains( fType ) )return true;
  3286. }
  3287. }
  3288. return false;
  3289. },
  3290. _execute: function(statement, callback, async, format){
  3291. var parameter = this.parseParameter(statement.parameter, format);
  3292. var filterList = this.parseFilter(statement.filter, parameter, format);
  3293. var obj = {
  3294. "filterList": filterList,
  3295. "parameter" : parameter
  3296. };
  3297. return MWF.Actions.load("x_query_assemble_surface").StatementAction.executeV2(
  3298. statement.name, statement.mode || "data", statement.page || 1, statement.pageSize || 20, obj,
  3299. function (json) {
  3300. if (callback) callback(json);
  3301. return json;
  3302. }, null, async);
  3303. },
  3304. parseFilter: function (filter, parameter, format) {
  3305. if (typeOf(filter) !== "array") return [];
  3306. if( !parameter )parameter = {};
  3307. var filterList = [];
  3308. (filter || []).each(function (d) {
  3309. if( !d.logic )d.logic = "and";
  3310. //var parameterName = d.path.replace(/\./g, "_");
  3311. var pName = d.path.replace(/\./g, "_");
  3312. var parameterName = pName;
  3313. var suffix = 1;
  3314. while( parameter[parameterName] ){
  3315. parameterName = pName + "_" + suffix;
  3316. suffix++;
  3317. }
  3318. var value = d.value;
  3319. if (d.comparison === "like" || d.comparison === "notLike") {
  3320. if (value.substr(0, 1) !== "%") value = "%" + value;
  3321. if (value.substr(value.length - 1, 1) !== "%") value = value + "%";
  3322. parameter[parameterName] = value; //"%"+value+"%";
  3323. } else {
  3324. if( ["sql", "sqlScript"].contains(format) ) {
  3325. if (d.formatType === "numberValue") {
  3326. value = parseFloat(value);
  3327. }
  3328. }else{
  3329. if (d.formatType === "dateTimeValue" || d.formatType === "datetimeValue") {
  3330. value = "{ts '" + value + "'}"
  3331. } else if (d.formatType === "dateValue") {
  3332. value = "{d '" + value + "'}"
  3333. } else if (d.formatType === "timeValue") {
  3334. value = "{t '" + value + "'}"
  3335. } else if (d.formatType === "numberValue") {
  3336. value = parseFloat(value);
  3337. }
  3338. }
  3339. parameter[parameterName] = value;
  3340. }
  3341. d.value = parameterName;
  3342. filterList.push(d);
  3343. }.bind(this));
  3344. return filterList;
  3345. },
  3346. parseParameter : function( obj, format ){
  3347. if( typeOf(obj) !== "object" )return {};
  3348. var parameter = {};
  3349. //传入的参数
  3350. for( var p in obj ){
  3351. var value = obj[p];
  3352. if( typeOf( value ) === "date" ){
  3353. if( ["sql", "sqlScript"].contains(format) ){
  3354. value = value.format("db");
  3355. }else{
  3356. value = "{ts '"+value.format("db")+"'}"
  3357. }
  3358. }
  3359. parameter[ p ] = value;
  3360. }
  3361. return parameter;
  3362. },
  3363. /**
  3364. * 如果查询的类型是"select",并且配置了查询视图,可以通过本方法进行数据选择。
  3365. * @method select
  3366. * @static
  3367. * @param {Object} statement - 要访问的查询配置的信息。数据格式如下:
  3368. * <div>以下的filter参数参考<a href='global.html#StatementFilter'>StatementFilter</a>,
  3369. * parameter参数参考<a href='global.html#StatementParameter'>StatementParameter</a></div>
  3370. * <pre><code class='language-js'>
  3371. * {
  3372. * "name" : "tesStatement", //(String)必选,查询配置的名称、别名或ID
  3373. * "isTitle" : true, //(Boolean)可选,是否显示视图标题。默认true
  3374. * "isMulti" : true, //(Boolean)可选,是否允许多选。默认true
  3375. * "width" : 700, //(Number)可选,选择框的宽度。默认700
  3376. * "height" : 400, //(Number)可选,选择框的高度。默认400
  3377. * "caption" : "标题", //(String)可选,选择框的标题
  3378. * "filter": [ //(Array)可选,对查询进行过滤的条件。json数组格式,每个数组元素描述一个过滤条件,每个元素数据格式如下:
  3379. * {
  3380. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  3381. * "comparison":"like",
  3382. * "value":"关于",
  3383. * "formatType":"textValue"
  3384. * }
  3385. * ],
  3386. * parameter : {
  3387. * "person" : "", //参数名称为下列值时,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  3388. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  3389. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  3390. * "processName" : "test流程", //其他写确定的值
  3391. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  3392. * }
  3393. * }
  3394. * </code></pre>
  3395. * @param {Function} callback - 访问成功后的回调函数
  3396. * @o2syntax
  3397. * this.statement.select(statement, callback);
  3398. * @example
  3399. * this.statement.select({
  3400. * "name": "物业材料查询", //查询的名称
  3401. * "isMulti": false, //只允许单选
  3402. * }, function(items) {
  3403. * //如果选择了某个数据,将数据赋值给表单输入框
  3404. * if (items.length) {
  3405. * //物料名称,表单中输入框名为“materialName”, 查询语句返回的字段名为“ylmc”
  3406. * this.data.materialName = items[0].ylmc;
  3407. * //规格,表单中输入框名为“specification”, 查询语句返回的字段名为“gg”
  3408. * this.data.specification = items[0].gg;
  3409. * //单价,表单中输入框名为“price”, 查询语句返回的字段名为“dj”
  3410. * this.data.price = items[0].dj;
  3411. * }
  3412. * }.bind(this));
  3413. */
  3414. "select": function (statement, callback, options) {
  3415. if (statement.name) {
  3416. // var parameter = this.parseParameter(statement.parameter);
  3417. // var filterList = this.parseFilter(statement.filter, parameter);
  3418. var statementJson = {
  3419. "statementId": statement.name || "",
  3420. "isTitle": (statement.isTitle === false) ? "no" : "yes",
  3421. "select": (statement.isMulti === false) ? "single" : "multi",
  3422. "filter": statement.filter,
  3423. "parameter": statement.parameter
  3424. };
  3425. if (!options) options = {};
  3426. options.width = statement.width;
  3427. options.height = statement.height;
  3428. options.title = statement.caption;
  3429. var width = options.width || "700";
  3430. var height = options.height || "400";
  3431. if (layout.mobile) {
  3432. var size = document.body.getSize();
  3433. width = size.x;
  3434. height = size.y;
  3435. options.style = "viewmobile";
  3436. }
  3437. width = width.toInt();
  3438. height = height.toInt();
  3439. var size = _form.app.content.getSize();
  3440. var x = (size.x - width) / 2;
  3441. var y = (size.y - height) / 2;
  3442. if (x < 0) x = 0;
  3443. if (y < 0) y = 0;
  3444. if (layout.mobile) {
  3445. x = 20;
  3446. y = 0;
  3447. }
  3448. var _self = this;
  3449. MWF.require("MWF.xDesktop.Dialog", function () {
  3450. var dlg = new MWF.xDesktop.Dialog({
  3451. "title": options.title || "select statement view",
  3452. "style": options.style || "view",
  3453. "top": y,
  3454. "left": x - 20,
  3455. "fromTop": y,
  3456. "fromLeft": x - 20,
  3457. "width": width,
  3458. "height": height,
  3459. "html": "<div style='height: 100%;'></div>",
  3460. "maskNode": _form.app.content,
  3461. "container": _form.app.content,
  3462. "buttonList": [
  3463. {
  3464. "text": MWF.LP.process.button.ok,
  3465. "action": function () {
  3466. //if (callback) callback(_self.view.selectedItems);
  3467. if (callback) callback(_self.statement.getData());
  3468. this.close();
  3469. }
  3470. },
  3471. {
  3472. "text": MWF.LP.process.button.cancel,
  3473. "action": function () { this.close(); }
  3474. }
  3475. ]
  3476. });
  3477. dlg.show();
  3478. if (layout.mobile) {
  3479. var backAction = dlg.node.getElement(".MWF_dialod_Action_back");
  3480. var okAction = dlg.node.getElement(".MWF_dialod_Action_ok");
  3481. if (backAction) backAction.addEvent("click", function (e) {
  3482. dlg.close();
  3483. }.bind(this));
  3484. if (okAction) okAction.addEvent("click", function (e) {
  3485. //if (callback) callback(this.view.selectedItems);
  3486. if (callback) callback(this.statement.getData());
  3487. dlg.close();
  3488. }.bind(this));
  3489. }
  3490. MWF.xDesktop.requireApp("query.Query", "Statement", function () {
  3491. this.statement = new MWF.xApplication.query.Query.Statement(dlg.content.getFirst(), statementJson, { "style": "select" }, _form.app, _form.Macro);
  3492. }.bind(this));
  3493. }.bind(this));
  3494. }
  3495. }
  3496. };
  3497. /**
  3498. * 您可以通过importer对象,执行导入模型的Excel导入数据功能。<br/>
  3499. * @module importer
  3500. * @o2cn 导入数据
  3501. * @o2category web
  3502. * @o2ordernumber 93
  3503. * @o2syntax
  3504. * //您可以在流程表单、内容管理表单、门户页面或视图中,通过this来获取statement对象,如下:
  3505. * var importer = this.importer;
  3506. */
  3507. this.importer = {
  3508. /**
  3509. * 根据指定的导入模型进行上传。
  3510. * @method upload
  3511. * @static
  3512. * @param {Object} options - 要执行的导入模型的选项。数据格式如下:
  3513. * <pre><code class='language-js'>{
  3514. * "name" : "testImporter", //(String)必选,导入模型的名称、别名或ID
  3515. * "application" : "testQuery" //(String)必选,导入模型所在应用的名称、别名或ID
  3516. * }
  3517. * </code></pre>
  3518. * @param {Function} [callback] - 导入成功后的回调函数
  3519. * @param {Boolean} [async] - 同步或异步调用。true:异步;false:同步。默认为true。
  3520. * @o2syntax
  3521. * this.importer.upload(options, callback, async);
  3522. * @example
  3523. * this.importer.upload({
  3524. * "name": "testImporter",
  3525. * "application" : "testQuery",
  3526. * }, function(json){
  3527. *
  3528. * });
  3529. */
  3530. "upload": function (options, callback, async) {
  3531. MWF.xDesktop.requireApp("query.Query", "Importer", function () {
  3532. var importer = new MWF.xApplication.query.Query.Importer(_form.app.content, options, {}, _form.app, _form.Macro);
  3533. importer.addEvent("afterImport", function (data) {
  3534. if(callback)callback(data);
  3535. });
  3536. importer.load();
  3537. }.bind(this));
  3538. // MWF.Actions.load("x_query_assemble_surface").StatementAction.executeV2(
  3539. // statement.name, statement.mode || "data", statement.page || 1, statement.pageSize || 20, obj,
  3540. // function (json) {
  3541. // if (callback) callback(json);
  3542. // }, null, async);
  3543. },
  3544. /**
  3545. * 根据指定的导入模型下载Excel模板。
  3546. * @method downloadTemplate
  3547. * @static
  3548. * @param {Object} options - 要执行的导入模型的选项。数据格式如下:
  3549. * <pre><code class='language-js'>{
  3550. * "name" : "testImporter", //(String)必选,导入模型的名称、别名或ID
  3551. * "application" : "testQuery" //(String)必选,导入模型所在应用的名称、别名或ID
  3552. * }
  3553. * </code></pre>
  3554. * @param {String} fileName - 导出的Excel名称
  3555. * @param {Function} callback - 整理好数据,在导出之前执行的方法,可接收参数如下:
  3556. * <pre><code class='language-js'>{
  3557. * "data" : ["标题","拟稿人"], //导出的表头数组
  3558. * "colWidthArray" : [200, 150] //列宽度
  3559. * }
  3560. * </code></pre>
  3561. * @o2syntax
  3562. * this.importer.downloadTemplate(object, fileName, callback);
  3563. * @example
  3564. * this.importer.downloadTemplate({
  3565. * "name": "testImporter",
  3566. * "application" : "testQuery",
  3567. * },"导入模板", function( object ){
  3568. * //添加一项
  3569. * object.data[0].push("备注");
  3570. * object.colWidthArray.push(300)
  3571. * });
  3572. */
  3573. "downloadTemplate": function(options, fileName,callback){
  3574. MWF.xDesktop.requireApp("query.Query", "Importer", function () {
  3575. var importer = new MWF.xApplication.query.Query.Importer(_form.app.content, options, {}, _form.app, _form.Macro);
  3576. importer.downloadTemplate(fileName, callback);
  3577. }.bind(this));
  3578. }
  3579. };
  3580. //include 引用脚本
  3581. //optionsOrName : {
  3582. // type : "", 默认为portal, 可以为 portal process cms
  3583. // application : "", 门户/流程/CMS的名称/别名/id, 默认为当前应用
  3584. // name : "" // 脚本名称/别名/id
  3585. //}
  3586. //或者name: "" // 脚本名称/别名/id
  3587. // if( !window.includedScripts ){
  3588. // var includedScripts = window.includedScripts = [];
  3589. // }else{
  3590. // var includedScripts = window.includedScripts;
  3591. // }
  3592. var includedScripts = [];
  3593. var _includeSingle = function (optionsOrName, callback, async) {
  3594. var options = optionsOrName;
  3595. if (typeOf(options) == "string") {
  3596. options = { name: options };
  3597. }
  3598. var name = options.name;
  3599. var type;
  3600. if( options.type === "service" ){
  3601. type = options.type;
  3602. }else{
  3603. type = (options.type && options.application) ? options.type : "portal";
  3604. }
  3605. var application = options.application || _form.json.application;
  3606. var key = type + "-" + application + "-" + name;
  3607. if( type === "service" ){
  3608. key = type + "-" + name;
  3609. }
  3610. if (includedScripts.indexOf(key) > -1) {
  3611. if (callback) callback.apply(this);
  3612. return;
  3613. }
  3614. //if (includedScripts.indexOf( name )> -1){
  3615. // if (callback) callback.apply(this);
  3616. // return;
  3617. //}
  3618. if( ( options.enableAnonymous || options.anonymous ) && type === "cms" ){
  3619. o2.Actions.load("x_cms_assemble_control").ScriptAnonymousAction.getWithAppWithName( application, name, function(json){
  3620. if (json.data){
  3621. includedScripts.push( key );
  3622. //名称、别名、id
  3623. ( json.data.importedList || [] ).each( function ( flag ) {
  3624. includedScripts.push( type + "-" + json.data.appId + "-" + flag );
  3625. if( json.data.appName )includedScripts.push( type + "-" + json.data.appName + "-" + flag );
  3626. if( json.data.appAlias )includedScripts.push( type + "-" + json.data.appAlias + "-" + flag );
  3627. });
  3628. includedScripts = includedScripts.concat(json.data.importedList || []);
  3629. MWF.CMSMacro.exec(json.data.text, this);
  3630. if (callback) callback.apply(this);
  3631. }else{
  3632. if (callback) callback.apply(this);
  3633. }
  3634. }.bind(this), null, false);
  3635. }else {
  3636. var scriptAction;
  3637. switch (type) {
  3638. case "portal":
  3639. if (this.scriptActionPortal) {
  3640. scriptAction = this.scriptActionPortal;
  3641. } else {
  3642. MWF.require("MWF.xScript.Actions.PortalScriptActions", null, false);
  3643. scriptAction = this.scriptActionPortal = new MWF.xScript.Actions.PortalScriptActions();
  3644. }
  3645. break;
  3646. case "process":
  3647. if (this.scriptActionProcess) {
  3648. scriptAction = this.scriptActionProcess;
  3649. } else {
  3650. MWF.require("MWF.xScript.Actions.ScriptActions", null, false);
  3651. scriptAction = this.scriptActionProcess = new MWF.xScript.Actions.ScriptActions();
  3652. }
  3653. break;
  3654. case "cms":
  3655. if (this.scriptActionCMS) {
  3656. scriptAction = this.scriptActionCMS;
  3657. } else {
  3658. MWF.require("MWF.xScript.Actions.CMSScriptActions", null, false);
  3659. scriptAction = this.scriptActionCMS = new MWF.xScript.Actions.CMSScriptActions();
  3660. }
  3661. break;
  3662. case "service" :
  3663. if (this.scriptActionService) {
  3664. scriptAction = this.scriptActionService;
  3665. } else {
  3666. MWF.require("MWF.xScript.Actions.ServiceScriptActions", null, false);
  3667. scriptAction = this.scriptActionService = new MWF.xScript.Actions.ServiceScriptActions();
  3668. }
  3669. break;
  3670. }
  3671. var successCallback = function (json) {
  3672. if (json.data) {
  3673. includedScripts.push(key);
  3674. //名称、别名、id
  3675. json.data.importedList.each( function ( flag ) {
  3676. if( type === "portal" ){
  3677. includedScripts.push( type + "-" + json.data.portal + "-" + flag );
  3678. if( json.data.portalName )includedScripts.push( type + "-" + json.data.portalName + "-" + flag );
  3679. if( json.data.portalAlias )includedScripts.push( type + "-" + json.data.portalAlias + "-" + flag );
  3680. }else if( type === "cms" ){
  3681. includedScripts.push( type + "-" + json.data.appId + "-" + flag );
  3682. if( json.data.appName )includedScripts.push( type + "-" + json.data.appName + "-" + flag );
  3683. if( json.data.appAlias )includedScripts.push( type + "-" + json.data.appAlias + "-" + flag );
  3684. }else if( type === "process" ){
  3685. includedScripts.push( type + "-" + json.data.application + "-" + flag );
  3686. if( json.data.appName )includedScripts.push( type + "-" + json.data.appName + "-" + flag );
  3687. if( json.data.appAlias )includedScripts.push( type + "-" + json.data.appAlias + "-" + flag );
  3688. }else if (type === "service") {
  3689. includedScripts.push(type + "-" + flag);
  3690. }
  3691. });
  3692. includedScripts = includedScripts.concat(json.data.importedList);
  3693. MWF.Macro.exec(json.data.text, this);
  3694. if (callback) callback.apply(this);
  3695. } else {
  3696. if (callback) callback.apply(this);
  3697. }
  3698. }.bind(this);
  3699. if( type === "service" ){
  3700. scriptAction.getScriptByName(name, includedScripts, successCallback, null, !!async);
  3701. }else{
  3702. scriptAction.getScriptByName(application, name, includedScripts, successCallback, null, !!async);
  3703. }
  3704. }
  3705. };
  3706. this.include = function( optionsOrName , callback, async){
  3707. if (o2.typeOf(optionsOrName)=="array"){
  3708. if (!!async){
  3709. var count = optionsOrName.length;
  3710. var loaded = 0;
  3711. optionsOrName.each(function(option){
  3712. _includeSingle.apply(this, [option, function(){
  3713. loaded++;
  3714. if (loaded>=count) if (callback) callback.apply(this);
  3715. }.bind(this), true]);
  3716. }.bind(this));
  3717. }else{
  3718. optionsOrName.each(function(option){
  3719. _includeSingle.apply(this, [option]);
  3720. }.bind(this));
  3721. if (callback) callback.apply(this);
  3722. }
  3723. }else{
  3724. _includeSingle.apply(this, [optionsOrName , callback, async])
  3725. }
  3726. };
  3727. this.define = function (name, fun, overwrite) {
  3728. var over = true;
  3729. if (overwrite === false) over = false;
  3730. var o = {};
  3731. o[name] = { "value": fun, "configurable": over };
  3732. MWF.defineProperties(this, o);
  3733. }.bind(this);
  3734. //仅前台对象-----------------------------------------
  3735. //form
  3736. /**
  3737. * 当查询设计中使用了select语句,并且配置了视图,可以在查询视图中使用本章API。<br/>
  3738. * queryStatement对象在查询视图中可用。它的很多方法与queryView类似。<b>(仅前端脚本可用)</b><br/>
  3739. * @module queryStatement
  3740. * @o2cn 查询视图
  3741. * @o2category web
  3742. * @o2range {QueryStatement}
  3743. * @o2ordernumber 80
  3744. * @borrows module:queryView.confirm as confirm
  3745. * @borrows module:queryView.alert as alert
  3746. * @borrows module:queryView.notice as notice
  3747. * @borrows module:queryView.dialog as dialog
  3748. * @borrows module:queryView.selectOrg as selectOrg
  3749. * @borrows module:queryView.addEvent as addEvent
  3750. * @borrows module:queryView.openWork as openWork
  3751. * @borrows module:queryView.openJob as openJob
  3752. * @borrows module:queryView.openDocument as openDocument
  3753. * @borrows module:queryView.openPortal as openPortal
  3754. * @borrows module:queryView.openCMS as openCMS
  3755. * @borrows module:queryView.openProcess as openProcess
  3756. * @borrows module:queryView.openApplication as openApplication
  3757. * @borrows module:queryView.createDocument as createDocument
  3758. * @borrows module:queryView.startProcess as startProcess
  3759. * @o2syntax
  3760. * //您可以在查询视图中,通过this来获取queryStatement对象,如下:
  3761. * var queryStatement = this.queryStatement;
  3762. */
  3763. /**
  3764. * 当查询视图被嵌入到门户页面、流程表单或内容管理表单的时候,可以在查询视图写脚本的地方通过这个方法来获取页面或表单的上下文。
  3765. * @method getParentEnvironment
  3766. * @memberOf module:queryStatement
  3767. * @static
  3768. * @return {MWF.xScript.Environment|MWF.xScript.CMSEnvironment} 页面或表单的上下文.
  3769. * @o2syntax
  3770. * this.queryStatement.getParentEnvironment();
  3771. * @example
  3772. * var env = this.queryStatement.getParentEnvironment(); //当视图被嵌入到页面的时候,可以在视图里获取页面的上下文
  3773. * env.page.toPortal( "公文门户" ); //调用page的toPage() 跳转到其他门户
  3774. */
  3775. /**
  3776. * 获取查询视图当前页的基本信息。
  3777. * @method getPageInfor
  3778. * @memberOf module:queryStatement
  3779. * @static
  3780. * @return {Object} 当前页的信息,格式如下:
  3781. *<pre><code class='language-js'>{
  3782. * "pages": 3, //总页数
  3783. * "perPageCount": 50, //每页的条数
  3784. * "currentPageNumber": 1 // 当前页数
  3785. * }
  3786. * </code></pre>
  3787. * @o2syntax
  3788. * this.queryStatement.getPageInfor();
  3789. */
  3790. /**
  3791. * 获取当前页的数据。
  3792. * @method getPageData
  3793. * @memberOf module:queryStatement
  3794. * @static
  3795. * @return {Object[]|Array[]} 当前页数据。
  3796. * <div>数据格式和 jpql 语句的写法有关</div>
  3797. * 如: "select o from table o" 返回 json数组
  3798. *<pre><code class='language-js'>[
  3799. {
  3800. "id" : "id1",
  3801. "title" : "title1"
  3802. },
  3803. {
  3804. "id" : "id2",
  3805. "title" : "title2"
  3806. },
  3807. ...
  3808. *]
  3809. * </code></pre>
  3810. * 如:"select id, title from table o" 返回 二维数组:
  3811. *<pre><code class='language-js'>[
  3812. ["id1", "title1"],
  3813. ["id2", "title2"],
  3814. ...
  3815. *]
  3816. *</code></pre>
  3817. * @o2syntax
  3818. * var data = this.queryStatement.getPageData();
  3819. */
  3820. /**
  3821. * 跳转到指定的页面。
  3822. * @method toPage
  3823. * @memberOf module:queryStatement
  3824. * @static
  3825. * @param {Number} pageNumber - 需要跳转的页码。
  3826. * @param {Function} [callback ] - 跳转的页面数据加载完成以后的回调方法。
  3827. * @o2syntax
  3828. * var data = this.queryStatement.toPage( pageNumber, callback );
  3829. * @example
  3830. * // 跳转到第2页并且获取该页的数据。
  3831. * this.queryStatement.toPage( 2, function(){
  3832. * var data = this.queryStatement.getPageData();
  3833. * }.bind(this) )
  3834. */
  3835. /**
  3836. * 当查询视图设置了允许多选的时候,可以通过这个方法全部选中当前页面的条目。
  3837. * @method selectAll
  3838. * @memberOf module:queryStatement
  3839. * @static
  3840. * @o2syntax
  3841. * this.queryStatement.selectAll();
  3842. */
  3843. /**
  3844. * 当查询视图设置了允许多选的时候,可以通过这个方法取消选中的条目。
  3845. * @method unSelectAll
  3846. * @memberOf module:queryStatement
  3847. * @static
  3848. * @o2syntax
  3849. * this.queryStatement.unSelectAll();
  3850. */
  3851. /**
  3852. * 获取选中的条目的数据。
  3853. * @method getSelectedData
  3854. * @memberOf module:queryStatement
  3855. * @static
  3856. * @return {Object[]|Array[]} 选中的条目的数据。
  3857. * <div>数据格式和 jpql 语句的写法有关</div>
  3858. * 如: "select o from table o" 返回 json数组
  3859. *<pre><code class='language-js'>[
  3860. {
  3861. "id" : "id1",
  3862. "title" : "title1"
  3863. },
  3864. {
  3865. "id" : "id2",
  3866. "title" : "title2"
  3867. },
  3868. ...
  3869. *]
  3870. * </code></pre>
  3871. * 如:"select id, title from table o" 返回 二维数组:
  3872. *<pre><code class='language-js'>[
  3873. ["id1", "title1"],
  3874. ["id2", "title2"],
  3875. ...
  3876. *]
  3877. *</code></pre>
  3878. * @o2syntax
  3879. * var data = this.queryStatement.getSelectedData();
  3880. */
  3881. /**获取queryStatement对应的DOM对象。
  3882. * @method node
  3883. * @static
  3884. * @methodOf module:queryStatement
  3885. * @see module:form.node
  3886. */
  3887. /**
  3888. * 重新加载查询视图。
  3889. * @method reload
  3890. * @methodOf module:queryStatement
  3891. * @static
  3892. * @o2syntax
  3893. * this.queryStatement.reload( callback );
  3894. */
  3895. /**
  3896. * queryView对象可在视图中可用。它的很多方法与form类似。<b>(仅前端脚本可用)</b><br/>
  3897. * @module queryView
  3898. * @o2cn 视图
  3899. * @o2category web
  3900. * @o2range {QueryView}
  3901. * @o2ordernumber 60
  3902. * @o2syntax
  3903. * //您可以在视图中,通过this来获取queryView对象,如下:
  3904. * var queryView = this.queryView;
  3905. */
  3906. this.page = this.form = this.queryView = this.queryStatement = {
  3907. /**
  3908. * 当视图被嵌入到门户页面、流程表单或内容管理表单的时候,可以在视图可以写脚本的地方中通过这个方法来获取页面或表单的上下文。
  3909. * @method getParentEnvironment
  3910. * @static
  3911. * @return {MWF.xScript.Environment|MWF.xScript.CMSEnvironment} 页面或表单的上下文.
  3912. * @o2syntax
  3913. * this.queryView.getParentEnvironment();
  3914. * @example
  3915. * var env = this.queryView.getParentEnvironment(); //当视图被嵌入到页面的时候,可以在视图里获取页面的上下文
  3916. * env.page.toPortal( "公文门户" ); //调用page的toPage() 跳转到其他门户
  3917. */
  3918. "getParentEnvironment" : function () { return _form.getParentEnvironment(); }, //视图嵌入的表单或页面的上下文
  3919. /**
  3920. * 获取查询的配置信息。
  3921. * @method getStatementInfor
  3922. * @memberOf module:queryStatement
  3923. * @static
  3924. * @return {Object} 查询的配置信息.
  3925. * <pre><code class='language-js'>{
  3926. * "query": "26d21c71-5114-4496-8ca1-a69e56324841", //所属应用id
  3927. * "id": "ee334220-66d3-4f78-afce-8ccf6b995c8c", //查询id
  3928. * "name": "测试查询", //名称
  3929. * "alias": "", //别名
  3930. * "description": "", //描述
  3931. * "table": "", //自建表的id
  3932. * "entityClassName": "com.x.processplatform.core.entity.content.Task", //系统表表名
  3933. * "entityCategory": "official", //表类型 official(系统表) 或 dynamic(自建表)
  3934. * "format": "jpql", //语句类型,jpql 或者 script(脚本) , v8.0后还有 sql, sqlScript
  3935. * "type": "select", //select/update/delete
  3936. * "data": "SELECT o FROM Task o where o.person = :person", //查询语句
  3937. * "countData": "SELECT count(o.id) FROM Task o where o.person = :person", //总数语句
  3938. * "countScriptText" : "", //总数语句脚本
  3939. * "scriptText" : "", //查询语句脚本
  3940. * "viewJson": { ... } //视图相关信息
  3941. * }</code></pre>
  3942. * @o2syntax
  3943. * this.queryStatement.getStatementInfor();
  3944. */
  3945. "getStatementInfor" : function () { return _form.getStatementInfor ? _form.getStatementInfor() : null; },
  3946. /**
  3947. * 获取查询的配置信息。
  3948. * @method getViewInfor
  3949. * @memberOf module:queryView
  3950. * @static
  3951. * @return {Object} 视图的配置信息.
  3952. * <pre><code class='language-js'>{
  3953. * "application": "db9fc893-7dbc-4e0f-a617-99089d2c6323", //视图所在应用
  3954. * "query": "db9fc893-7dbc-4e0f-a617-99089d2c6323", //视图所在应用,同application
  3955. * "name": "视图自定义测试", //视图名称
  3956. * "viewName": "视图自定义测试", //视图名称,同name
  3957. * "isExpand": "no", //如果有分类,默认是否展开开
  3958. * "id": "705ce967-2f9c-425c-8873-3bd729249e1d", //视图id
  3959. * "alias": "", //视图别名
  3960. * "description": "", //视图描述
  3961. * "display": true, //视图是否显示
  3962. * "type": "cms", //视图嵌入的数据类型, cms 或 process
  3963. * "count": 2000, //最多返回2000条
  3964. * "pageSize": 20, //每页的条数
  3965. * "createTime": "2019-09-02 10:18:27",
  3966. * "updateTime": "2020-03-26 15:53:03"
  3967. * }</code></pre>
  3968. * @o2syntax
  3969. * this.queryView.getViewInfor();
  3970. */
  3971. "getViewInfor" : function () { return _form.getViewInfor(); },
  3972. /**
  3973. * 获取视图当前页的基本信息。
  3974. * @method getPageInfor
  3975. * @memberOf module:queryView
  3976. * @static
  3977. * @return {Object} 当前页的信息,格式如下:
  3978. *<pre><code class='language-js'>{
  3979. * "pages": 3, //总页数
  3980. * "perPageCount": 50, //每页的条数
  3981. * "currentPageNumber": 1 // 当前页数
  3982. * }
  3983. * </code></pre>
  3984. * @o2syntax
  3985. * this.queryView.getPageInfor();
  3986. */
  3987. "getPageInfor" : function () { return _form.getPageInfor(); },
  3988. /**
  3989. * 获取当前页的数据。
  3990. * @method getPageData
  3991. * @memberOf module:queryView
  3992. * @static
  3993. * @return {Object[]} 当前页数据。
  3994. * <div>没有分类时候,数据格式如下:</div>
  3995. *<pre><code class='language-js'>[
  3996. * {
  3997. * "bundle": "099ed3c9-dfbc-4094-a8b7-5bfd6c5f7070", //cms 的 documentId, process 的 jobId
  3998. * "data": { //视图中配置的数据
  3999. * "title": "考勤管理-配置-统计周期设置", //列名称及列值
  4000. * "time": "2018-08-25 11:29:45"
  4001. * }
  4002. * },
  4003. * ...
  4004. *]
  4005. * </code></pre>
  4006. * 有分类的时候,数据格式如下:
  4007. *<pre><code class='language-js'>[
  4008. * {
  4009. * "group": "工作日志", //分类1
  4010. * "list": [ //分类下的数据
  4011. * {
  4012. * "bundle": "001257be-725a-43cf-9679-3892bbab696a", //cms 的 documentId, process 的 jobId
  4013. * "data": { //视图中配置的数据
  4014. * "title": "标题", //列名称及列值
  4015. * "time": "2018-07-31 15:39:13",
  4016. * "category": "工作日志"
  4017. * }
  4018. * },
  4019. * ...
  4020. * ]
  4021. * },
  4022. * ...
  4023. *]
  4024. *</code></pre>
  4025. * @o2syntax
  4026. * var data = this.queryView.getPageData();
  4027. */
  4028. "getPageData" : function () { return _form.getPageData(); },
  4029. /**
  4030. * 跳转到指定的页面。
  4031. * @method toPage
  4032. * @memberOf module:queryView
  4033. * @static
  4034. * @param {Number} pageNumber - 需要跳转的页码。
  4035. * @param {Function} [callback ] - 跳转的页面数据加载完成以后的回调方法。
  4036. * @o2syntax
  4037. * var data = this.queryView.toPage( pageNumber, callback );
  4038. * @example
  4039. * // 跳转到第2页并且获取该页的数据。
  4040. * this.queryView.toPage( 2, function(){
  4041. * var data = this.queryView.getPageData();
  4042. * }.bind(this) )
  4043. */
  4044. "toPage" : function ( pageNumber, callback ) { return _form.toPage(pageNumber, callback); },
  4045. /**
  4046. * 当视图设置了允许多选的时候,可以通过这个方法全部选中当前页面的条目。
  4047. * @method selectAll
  4048. * @memberOf module:queryView
  4049. * @static
  4050. * @o2syntax
  4051. * this.queryView.selectAll();
  4052. */
  4053. "selectAll" : function () { return _form.selectAll(); },
  4054. /**
  4055. * 当视图设置了允许多选的时候,可以通过这个方法取消选中的条目。
  4056. * @method unSelectAll
  4057. * @memberOf module:queryView
  4058. * @static
  4059. * @o2syntax
  4060. * this.queryView.unSelectAll();
  4061. */
  4062. "unSelectAll" : function () { return _form.unSelectAll(); },
  4063. /**
  4064. * 获取选中的条目的数据。
  4065. * @method getSelectedData
  4066. * @memberOf module:queryView
  4067. * @static
  4068. * @return {Object[]} 选中的条目的数据。
  4069. * <div>格式如下:</div>
  4070. * <pre><code class='language-js'>
  4071. * [
  4072. {
  4073. "bundle": "099ed3c9-dfbc-4094-a8b7-5bfd6c5f7070", //cms 的 documentId, process 的 jobId
  4074. "data": { //视图中配置的数据
  4075. "title": "考勤管理-配置-统计周期设置", //列名称及列值
  4076. "time": "2018-08-25 11:29:45"
  4077. }
  4078. },
  4079. ...
  4080. * ]
  4081. </code></pre>
  4082. * @o2syntax
  4083. * var data = this.queryView.getSelectedData();
  4084. */
  4085. "getSelectedData" : function () { return _form.getSelectedData(); },
  4086. /**
  4087. * 设置视图的过滤条件,该方法不能修改视图中默认的过滤条件(在开发视图的时候添加的过滤条件),而是在这上面新增。
  4088. * @method setFilter
  4089. * @memberOf module:queryView
  4090. * @static
  4091. * @param {(ViewFilter[]|ViewFilter|Null)} [filter] 过滤条件。<br/>
  4092. * 当不传参数、参数为null或为空数组的情况下,表示清空非视图默认的过滤条件。<br/>
  4093. * 如果传入对象或者非空数组的时候,参数如下:
  4094. * <pre><code class='language-js'>[
  4095. * {
  4096. * "logic":"and",
  4097. * "path":"$work.title",
  4098. * "comparison":"like",
  4099. * "value":"7月",
  4100. * "formatType":"textValue"
  4101. * }
  4102. *]
  4103. * </code></pre>
  4104. * @param {Function} [callback] 过滤完成并重新加载数据后的回调方法。
  4105. * @o2syntax
  4106. * this.queryView.setFilter( filter );
  4107. */
  4108. "setFilter" : function ( filter, callback ) { return _form.setFilter(filter, callback); },
  4109. /**
  4110. * 增加查询语句where子句的过滤条件。
  4111. * @method setStatementFilter
  4112. * @memberOf module:queryStatement
  4113. * @static
  4114. * @param {(StatementFilter[]|Null)} [filter] 过滤条件。<br/>
  4115. * 过滤条件。当不传参数、参数为null或为空数组的情况下,表示清空非视图默认的过滤条件。<br/>
  4116. * 如果传入非空数组的时候,参数如下:
  4117. * <pre><code class='language-js'>[
  4118. * {
  4119. * "path":"o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  4120. * "comparison":"like",
  4121. * "value":"关于",
  4122. * "formatType":"textValue"
  4123. * }
  4124. *]
  4125. * </code></pre>
  4126. * @param {StatementParameter} [parameter] 过滤条件。对查询语句where子句的形如":person"的参数部分进行赋值,参数如下:
  4127. * <pre><code class='language-js'>
  4128. * //假设语句为 select count(o.id) from Read o where (o.person = :person) and (o.startTime > :startTime) and (o.applicationName like :applicationName) and (o.processName = :processName)。
  4129. * //那么可能的参数如下:
  4130. * {
  4131. * "person" : "", //出于安全考虑参数名称为下列值时,不需要填写参数值,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  4132. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  4133. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  4134. * "processName" : "test流程", //其他写确定的值
  4135. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  4136. * }
  4137. * </code></pre>
  4138. * @param {Function} [callback] 过滤完成并重新加载数据后的回调方法。
  4139. * @o2syntax
  4140. * this.queryStatement.setStatementFilter( filter, parameter, callback );
  4141. */
  4142. "setStatementFilter" : function ( filter , parameter, callback) { return _form.setFilter(filter, parameter, callback); },
  4143. /**
  4144. * 把当前视图切换成另外一个视图。
  4145. * @method switchView
  4146. * @memberOf module:queryView
  4147. * @static
  4148. * @param {Object} options 需要跳转的参数配置。参数说明如下:
  4149. * <div>下列说明的filter属性参考<a href='global.html#ViewFilter'>ViewFilter</a></div>
  4150. * <pre><code class='language-js'>{
  4151. * "application": application, //必选,视图的所在应用id
  4152. * "viewName": viewName, //必选,视图的名称
  4153. * "filter": [
  4154. * {
  4155. * "logic":"and",
  4156. * "path":"$work.title",
  4157. * "comparison":"like",
  4158. * "value":"7月",
  4159. * "formatType":"textValue"
  4160. * }
  4161. * ], //可选,增加视图的过滤条件(ViewFilter),如果不传,则使用原视图的配置;如果需要去掉原视图的配置,则传入空数组 []
  4162. * "isTitle": "yes", //可选,是否显示t视图的标题行,可选值有:yes no
  4163. * "select": "none", //可选,是否允许新视图选择,如果不传,则使用原视图的配置, 可选值有: 不允许选择 none, 单选 single,多选 multi
  4164. * "titleStyles": {
  4165. * "color" : "red",
  4166. * "font-size" : "14px"
  4167. * }, //可选,标题行样式,如果不传,则使用原视图的配置
  4168. * "itemStyles": {
  4169. * "color" : "#333",
  4170. * "font-size" : "12px"
  4171. * }, //可选,内容行样式,如果不传,则使用原视图的配置
  4172. * "isExpand": "no", //可选,默认是否展开分类,如果不传,则使用原视图的配置, 可选值有:yes no
  4173. * }
  4174. * </code></pre>
  4175. * @o2syntax
  4176. * this.queryView.switchView( options );
  4177. */
  4178. "switchView" : function ( options ) { return _form.switchView(options); },
  4179. /**
  4180. * 把当前查询视图切换成另外一个查询视图。
  4181. * @method switchStatement
  4182. * @memberOf module:queryStatement
  4183. * @static
  4184. * @param {Object} options 需要跳转的参数配置。参数说明如下:
  4185. * <div>下列说明的filter属性参考<a href='global.html#StatementFilter'>StatementFilter</a>,
  4186. * parameter属性参考<a href='global.html#StatementParameter'>StatementParameter</a></div>
  4187. * <pre><code class='language-js'>this.queryStatement.switchStatement({
  4188. * "statementId": statementId, //必选,查询的名称、别名、id
  4189. * "isTitle": "yes", //可选,是否显示视图的标题行,可选值有:yes no
  4190. * "select": "multi", //可选,是否允许新视图选择,如果不传,则使用原视图的配置, 可选值有: 不允许选择 none, 单选 single,多选 multi
  4191. * "showActionbar": false, //可选,是否显示操作条
  4192. * "filter": [ //可选,增加查询语句where子句的过滤条件
  4193. * {
  4194. * "path": "o.title", //查询语句格式为jpql使用o.title,为原生sql中使用xtitle
  4195. * "title": "标题",
  4196. * "type": "filter",
  4197. * "comparison": "like",
  4198. * "formatType": "textValue",
  4199. * "value": "测试"
  4200. * }
  4201. * ],
  4202. * //假设语句为 select count(o.id) from Read o where (o.person = :person) and (o.startTime > :startTime) and (o.applicationName like :applicationName) and (o.processName = :processName)
  4203. * "parameter" : { //可选,对查询语句where语句的形如":person"的参数部分进行赋值
  4204. * "person" : "", //出于安全考虑参数名称为下列值时,不需要填写参数值,后台默认赋值,person(当前人),identityList(当前人身份列表),unitList(当前人所在直接组织), unitAllList(当前人所在所有组织), groupList(当前人所在群组),roleList(当前人拥有的角色)。v8.0以后系统自动解析,不需要再传这类参数。
  4205. * "startTime" : (new Date("2020-01-01")), //如果对比的是日期,需要传入 Date 类型
  4206. * "applicationName" : "%test%", //如果运算符用的是 like, noLike,模糊查询
  4207. * "processName" : "test流程" //其他写确定的值
  4208. * "?1": "关于" //v8.0后查询语句支持问号加数字的传参
  4209. * }
  4210. * })
  4211. * </code></pre>
  4212. * @o2syntax
  4213. * this.queryStatement.switchStatement( options );
  4214. */
  4215. "switchStatement" : function ( options ) { if(_form.switchStatement)_form.switchStatement(options) ; },
  4216. /**
  4217. * 重新加载视图。
  4218. * @method reload
  4219. * @methodOf module:queryView
  4220. * @static
  4221. * @o2syntax
  4222. * this.queryView.reload( callback );
  4223. */
  4224. "reload" : function ( callback ) { _form.reload( callback ); },
  4225. // "getInfor": function () { return ev.pageInfor; },
  4226. // "infor": ev.pageInfor,
  4227. /**获取打开当前页面的component对象。
  4228. * @method getApp
  4229. * @static
  4230. * @see module:form.getApp
  4231. */
  4232. getApp: function () { return _form.app; },
  4233. // "app": _form.app,
  4234. /**获取queryView对应的DOM对象。
  4235. * @method node
  4236. * @static
  4237. * @methodOf module:queryView
  4238. * @see module:form.node
  4239. */
  4240. "node": function () { return _form.node; },
  4241. // "get": function (name) { return (_form.all) ? _form.all[name] : null; },
  4242. // "getWidgetModule": function (widget, moduleName) {
  4243. // if (!_form.widgetModules || !_form.widgetModules[widget]) return null;
  4244. // var module = _form.widgetModules[widget][moduleName];
  4245. // return module || null;
  4246. // },
  4247. // "getField": function (name) { return _forms[name]; },
  4248. // "getAction": function () { return _form.workAction },
  4249. "getDesktop": function () { return _form.app ? _form.app.desktop : null},
  4250. // "getData": function () { return new MWF.xScript.JSONData(_form.getData()); },
  4251. //"save": function(callback){_form.saveWork(callback);},
  4252. // "close": function () { _form.closeWork(); },
  4253. // "print": function (application, form) {
  4254. // _form.printWork(application, form);
  4255. // },
  4256. /**弹出一个确认框。
  4257. * @method confirm
  4258. * @static
  4259. * @methodOf module:queryView
  4260. * @see module:form.confirm
  4261. */
  4262. "confirm": function (type, title, text, width, height, ok, cancel, callback, mask, style) {
  4263. // var p = MWF.getCenter({"x": width, "y": height});
  4264. // e = {"event": {"clientX": p.x,"x": p.x,"clientY": p.y,"y": p.y}};
  4265. // _form.confirm(type, e, title, text, width, height, ok, cancel, callback, mask, style);
  4266. if ((arguments.length <= 1) || o2.typeOf(arguments[1]) === "string") {
  4267. var p = MWF.getCenter({ "x": width, "y": height });
  4268. e = { "event": { "clientX": p.x, "x": p.x, "clientY": p.y, "y": p.y } };
  4269. _form.confirm(type, e, title, text, width, height, ok, cancel, callback, mask, style);
  4270. } else {
  4271. e = (arguments.length > 1) ? arguments[1] : null;
  4272. title = (arguments.length > 2) ? arguments[2] : null;
  4273. text = (arguments.length > 3) ? arguments[3] : null;
  4274. width = (arguments.length > 4) ? arguments[4] : null;
  4275. height = (arguments.length > 5) ? arguments[5] : null;
  4276. ok = (arguments.length > 6) ? arguments[6] : null;
  4277. cancel = (arguments.length > 7) ? arguments[7] : null;
  4278. callback = (arguments.length > 8) ? arguments[8] : null;
  4279. mask = (arguments.length > 9) ? arguments[9] : null;
  4280. style = (arguments.length > 10) ? arguments[10] : null;
  4281. _form.confirm(type, e, title, text, width, height, ok, cancel, callback, mask, style);
  4282. }
  4283. },
  4284. /**显示一个带关闭按钮的信息框。
  4285. * @method alert
  4286. * @static
  4287. * @methodOf module:queryView
  4288. * @see module:form.alert
  4289. */
  4290. "alert": function(type, title, text, width, height){
  4291. _form.alert(type, title, text, width, height);
  4292. },
  4293. /**显示一个信息框。
  4294. * @method notice
  4295. * @static
  4296. * @methodOf module:queryView
  4297. * @see module:form.notice
  4298. */
  4299. "notice": function (content, type, target, where, offset, option) {
  4300. _form.notice(content, type, target, where, offset, option);
  4301. },
  4302. /**打开一个对话框
  4303. * @method dialog
  4304. * @static
  4305. * @see module:form.dialog
  4306. */
  4307. "dialog": function ( options ) {
  4308. return _form.dialog( options );
  4309. },
  4310. /**打开人员组织选择界面
  4311. * @method selectOrg
  4312. * @static
  4313. * @see module:form.selectOrg
  4314. */
  4315. "selectOrg": function ( container, options, delayLoad) {
  4316. if( !container )container = _form.app.content;
  4317. MWF.xDesktop.requireApp("Selector", "package", null, false);
  4318. return new MWF.O2Selector(container, options, delayLoad);
  4319. },
  4320. /** 给视图添加事件。
  4321. * @method addEvent
  4322. * @static
  4323. * @methodOf module:queryView
  4324. * @see module:form.addEvent
  4325. */
  4326. "addEvent": function (e, f) { _form.addEvent(e, f); },
  4327. // "openWindow": function (form, app) {
  4328. // _form.openWindow(form, app);
  4329. // },
  4330. // "toPage": function (name, par, nohis) {
  4331. // _form.app.toPage(name, par, nohis);
  4332. // },
  4333. // "toPortal": function (portal, page, par) {
  4334. // _form.app.toPortal(portal, page, par);
  4335. // },
  4336. /**打开一个在流转或已完成的流程实例。
  4337. * @method openWork
  4338. * @static
  4339. * @methodOf module:queryView
  4340. * @see module:form.openWork
  4341. */
  4342. "openWork": function (id, completedId, title, options) {
  4343. var op = options || {};
  4344. op.workId = id;
  4345. op.workCompletedId = completedId;
  4346. op.docTitle = title;
  4347. op.appId = "process.Work" + (op.workId || op.workCompletedId);
  4348. return layout.desktop.openApplication(this.event, "process.Work", op);
  4349. },
  4350. /**根据流程的jobId打开工作。
  4351. * @method openJob
  4352. * @static
  4353. * @methodOf module:queryView
  4354. * @see module:form.openJob
  4355. */
  4356. "openJob": function (id, choice, options, callback) {
  4357. var workData = null, handel;
  4358. o2.Actions.get("x_processplatform_assemble_surface").listWorkByJob(id, function(json){
  4359. if (json.data) workData = json.data;
  4360. }.bind(this), null, false);
  4361. if( !layout.inBrowser && o2.typeOf(callback) === "function" ){
  4362. if( !options )options = {};
  4363. var queryLoad = options.onQueryLoad;
  4364. options.onQueryLoad = function () {
  4365. if( o2.typeOf(queryLoad) === "function" )queryLoad.call(this);
  4366. callback(this);
  4367. }
  4368. }
  4369. runCallback = function ( handel ) {
  4370. if( o2.typeOf(callback) === "function" ) {
  4371. if (layout.inBrowser) {
  4372. callback(handel);
  4373. } else if (options && options.appId) {
  4374. if (layout.desktop && layout.desktop.apps && layout.desktop.apps[options.appId]) {
  4375. callback(layout.desktop.apps[options.appId], true);
  4376. }else{
  4377. callback(handel, false);
  4378. }
  4379. }else{
  4380. callback(handel, false);
  4381. }
  4382. }
  4383. };
  4384. if (workData){
  4385. var len = workData.workList.length + workData.workCompletedList.length;
  4386. if (len){
  4387. if (len>1 && choice){
  4388. var node = new Element("div", {"styles": {"padding": "20px", "width": "500px"}}).inject(_form.node);
  4389. workData.workList.each(function(work){
  4390. var workNode = new Element("div", {
  4391. "styles": {
  4392. "background": "#ffffff",
  4393. "border-radius": "10px",
  4394. "clear": "both",
  4395. "margin-bottom": "10px",
  4396. "height": "40px",
  4397. "padding": "10px 10px"
  4398. }
  4399. }).inject(node);
  4400. var html = "<div style='height: 40px; width: 40px; float: left; background: url(../x_component_process_Xform/$Form/default/icon/work.png) no-repeat center center'></div>" +
  4401. "<div style='height: 40px; width: 40px; float: right'><div class='MWFAction' style='height: 20px; width: 40px; margin-top: 10px; border: 1px solid #999999; border-radius: 5px;text-align: center; cursor: pointer'>"+o2.LP.widget.open+"</div></div>"+
  4402. "<div style='height: 20px; line-height: 20px; margin: 0px 40px'>"+work.title+"</div>" +
  4403. "<div style='margin: 0px 40px'><div style='color:#999999; float: left; margin-right: 10px'>"+work.activityName+"</div>" +
  4404. "<div style='color:#999999; float: left; margin-right: 10px'>"+work.activityArrivedTime+"</div>" +
  4405. "<div style='color:#999999; float: left; margin-right: 10px'>"+(work.manualTaskIdentityText || "")+"</div></div>";
  4406. workNode.set("html", html);
  4407. var action = workNode.getElement(".MWFAction");
  4408. action.store("work", work);
  4409. action.addEvent("click", function(e){
  4410. var work = e.target.retrieve("work");
  4411. if (work){
  4412. handel = this.openWork(work.id, null, work.title, options);
  4413. runCallback( handel );
  4414. }
  4415. dlg.close();
  4416. }.bind(this));
  4417. }.bind(this));
  4418. workData.workCompletedList.each(function(work){
  4419. var workNode = new Element("div", {
  4420. "styles": {
  4421. "background": "#ffffff",
  4422. "border-radius": "10px",
  4423. "clear": "both",
  4424. "margin-bottom": "10px",
  4425. "height": "40px",
  4426. "padding": "10px 10px"
  4427. }
  4428. }).inject(node);
  4429. var html = "<div style='height: 40px; width: 40px; float: left; background: url(../x_component_process_Xform/$Form/default/icon/work.png) no-repeat center center'></div>" +
  4430. "<div style='height: 40px; width: 40px; float: right'><div class='MWFAction' style='height: 20px; width: 40px; margin-top: 10px; border: 1px solid #999999; border-radius: 5px;text-align: center; cursor: pointer'>"+o2.LP.widget.open+"</div></div>"+
  4431. "<div style='height: 20px; line-height: 20px; margin: 0px 40px'>"+work.title+"</div>" +
  4432. "<div style='margin: 0px 40px'><div style='color:#999999; float: left; margin-right: 10px'>"+o2.LP.widget.workcompleted+"</div>" +
  4433. "<div style='color:#999999; float: left; margin-right: 10px'>"+work.completedTime+"</div>";
  4434. workNode.set("html", html);
  4435. var action = workNode.getElement(".MWFAction");
  4436. action.store("work", work);
  4437. action.addEvent("click", function(e){
  4438. var work = e.target.retrieve("work");
  4439. if (work){
  4440. handel = this.openWork(null, work.id, work.title, options);
  4441. runCallback( handel );
  4442. }
  4443. dlg.close();
  4444. }.bind(this));
  4445. }.bind(this));
  4446. var height = node.getSize().y+20;
  4447. if (height>600) height = 600;
  4448. var dlg = o2.DL.open({
  4449. "title": o2.LP.widget.choiceWork,
  4450. "style" : "user",
  4451. "isResize": false,
  4452. "content": node,
  4453. "buttonList": [
  4454. {
  4455. "type" : "cancel",
  4456. "text": o2.LP.widget.close,
  4457. "action": function(){dlg.close();}
  4458. }
  4459. ]
  4460. });
  4461. }else{
  4462. if (workData.workList.length){
  4463. var work = workData.workList[0];
  4464. handel = this.openWork(work.id, null, work.title, options);
  4465. runCallback( handel );
  4466. return handel;
  4467. }else{
  4468. var work = workData.workCompletedList[0];
  4469. handel = this.openWork(null, work.id, work.title, options);
  4470. runCallback( handel );
  4471. return handel;
  4472. }
  4473. }
  4474. }else{
  4475. runCallback(new Error("Can't open this Job", {
  4476. cause: workData
  4477. }));
  4478. }
  4479. }else{
  4480. runCallback(new Error("Can't open this Job", {
  4481. cause: workData
  4482. }));
  4483. }
  4484. },
  4485. /**打开一个内容管理文档。
  4486. * @method openDocument
  4487. * @static
  4488. * @methodOf module:queryView
  4489. * @see module:form.openDocument
  4490. */
  4491. "openDocument": function (id, title, options) {
  4492. var op = options || {};
  4493. op.documentId = id;
  4494. op.docTitle = title || "";
  4495. op.appId = (op.appId) || ("cms.Document"+id);
  4496. if( op.onPostPublish ){
  4497. op.postPublish = op.onPostPublish;
  4498. delete op.onPostPublish;
  4499. }
  4500. if( op.onAfterPublish ){
  4501. op.afterPublish = op.onAfterPublish;
  4502. delete op.onAfterPublish;
  4503. }
  4504. if( op.onAfterSave ){
  4505. op.afterSave = op.onAfterSave;
  4506. delete op.onAfterSave;
  4507. }
  4508. if( op.onBeforeClose ){
  4509. op.beforeClose = op.onBeforeClose;
  4510. delete op.onBeforeClose;
  4511. }
  4512. if( op.onPostDelete ){
  4513. op.postDelete = op.onPostDelete;
  4514. delete op.onPostDelete;
  4515. }
  4516. return layout.desktop.openApplication(this.event, "cms.Document", op);
  4517. },
  4518. /**打开一个门户页面。
  4519. * @method openPortal
  4520. * @static
  4521. * @methodOf module:queryView
  4522. * @see module:form.openPortal
  4523. */
  4524. "openPortal": function (name, page, par) {
  4525. var action = MWF.Actions.get("x_portal_assemble_surface");
  4526. action.getApplication(name, function (json) {
  4527. if (json.data) {
  4528. if (page) {
  4529. action.getPageByName(page, json.data.id, function (pageJson) {
  4530. var pageId = (pageJson.data) ? pageJson.data.id : "";
  4531. layout.desktop.openApplication(null, "portal.Portal", {
  4532. "portalId": json.data.id,
  4533. "pageId": pageId,
  4534. "parameters": par,
  4535. "appId": (par && par.appId) || ("portal.Portal" + json.data.id + pageId)
  4536. })
  4537. });
  4538. } else {
  4539. layout.desktop.openApplication(null, "portal.Portal", {
  4540. "portalId": json.data.id,
  4541. "parameters": par,
  4542. "appId": (par && par.appId) || ("portal.Portal" + json.data.id)
  4543. })
  4544. }
  4545. }
  4546. });
  4547. },
  4548. /**打开一个内容管理栏目。
  4549. * @method openCMS
  4550. * @static
  4551. * @methodOf module:queryView
  4552. * @see module:form.openCMS
  4553. */
  4554. "openCMS": function (name) {
  4555. var action = MWF.Actions.get("x_cms_assemble_control");
  4556. action.getColumn(name, function (json) {
  4557. if (json.data) {
  4558. layout.desktop.openApplication(null, "cms.Module", {
  4559. "columnId": json.data.id,
  4560. "appId": "cms.Module" + json.data.id
  4561. });
  4562. }
  4563. });
  4564. },
  4565. /**打开一个流程应用。
  4566. * @method openProcess
  4567. * @static
  4568. * @methodOf module:queryView
  4569. * @see module:form.openProcess
  4570. */
  4571. "openProcess": function (name) {
  4572. var action = MWF.Actions.get("x_processplatform_assemble_surface");
  4573. action.getApplication(name, function (json) {
  4574. if (json.data) {
  4575. layout.desktop.openApplication(null, "process.Application", {
  4576. "id": json.data.id,
  4577. "appId": "process.Application" + json.data.id
  4578. });
  4579. }
  4580. });
  4581. },
  4582. /**打开一个任意一个component应用。
  4583. * @method openApplication
  4584. * @static
  4585. * @methodOf module:queryView
  4586. * @see module:form.openApplication
  4587. */
  4588. "openApplication": function (name, options, status) {
  4589. return layout.desktop.openApplication(null, name, options, status);
  4590. },
  4591. /**创建一个内容管理文档。
  4592. * @method createDocument
  4593. * @static
  4594. * @methodOf module:queryView
  4595. * @see module:form.createDocument
  4596. */
  4597. "createDocument": function (columnOrOptions, category, data, identity, callback, target, latest, selectColumnEnable, ignoreTitle, restrictToColumn) {
  4598. var column = columnOrOptions;
  4599. var onAfterPublish, onPostPublish;
  4600. if (typeOf(columnOrOptions) == "object") {
  4601. column = columnOrOptions.column;
  4602. category = columnOrOptions.category;
  4603. data = columnOrOptions.data;
  4604. identity = columnOrOptions.identity;
  4605. callback = columnOrOptions.callback;
  4606. target = columnOrOptions.target;
  4607. latest = columnOrOptions.latest;
  4608. selectColumnEnable = columnOrOptions.selectColumnEnable;
  4609. ignoreTitle = columnOrOptions.ignoreTitle;
  4610. restrictToColumn = columnOrOptions.restrictToColumn;
  4611. onAfterPublish = columnOrOptions.onAfterPublish;
  4612. onPostPublish = columnOrOptions.onPostPublish;
  4613. }
  4614. // 移动端 app相关的实现
  4615. if (layout.mobile) {
  4616. var options = {};
  4617. if (column) {
  4618. options["column"] = column
  4619. }
  4620. if (category) {
  4621. options["category"] = category
  4622. }
  4623. if (data) {
  4624. options["data"] = data
  4625. }
  4626. if (identity) {
  4627. options["identity"] = identity
  4628. }
  4629. if (typeof(latest) == 'undefined' || latest === null) {
  4630. options["latest"] = true
  4631. } else {
  4632. options["latest"] = latest
  4633. }
  4634. if (typeof(ignoreTitle) == 'undefined' || ignoreTitle === null) {
  4635. options["ignoreTitle"] = false
  4636. } else {
  4637. options["ignoreTitle"] = ignoreTitle
  4638. }
  4639. if (window.o2android && window.o2android.postMessage) {
  4640. var body = {
  4641. type: "createO2CmsDocument",
  4642. data: options
  4643. };
  4644. window.o2android.postMessage(JSON.stringify(body));
  4645. return;
  4646. } else if (window.o2android && window.o2android.createO2CmsDocument){
  4647. window.o2android.createO2CmsDocument(JSON.stringify(options));
  4648. return;
  4649. } else if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.createO2CmsDocument) {
  4650. window.webkit.messageHandlers.createO2CmsDocument.postMessage(options);
  4651. return;
  4652. }
  4653. }
  4654. // 下面是pc端
  4655. if (target) {
  4656. if (layout.app && layout.app.inBrowser) {
  4657. layout.app.content.empty();
  4658. layout.app = null;
  4659. }
  4660. }
  4661. MWF.xDesktop.requireApp("cms.Index", "Newer", function () {
  4662. var starter = new MWF.xApplication.cms.Index.Newer(null, null, _form.app, null, {
  4663. "documentData": data,
  4664. "identity": identity,
  4665. "ignoreTitle": ignoreTitle === true,
  4666. "ignoreDrafted": latest === false,
  4667. "selectColumnEnable": !category || selectColumnEnable === true,
  4668. "restrictToColumn": restrictToColumn === true || (!!category && selectColumnEnable !== true),
  4669. "categoryFlag": category, //category id or name
  4670. "columnFlag": column, //column id or name,
  4671. "onStarted": function (documentId, data, windowHandle) {
  4672. if (callback) callback(documentId, data, windowHandle);
  4673. },
  4674. "onPostPublish": function () {
  4675. if(onPostPublish)onPostPublish();
  4676. },
  4677. "onAfterPublish": function () {
  4678. if(onAfterPublish)onAfterPublish();
  4679. }
  4680. });
  4681. starter.load();
  4682. })
  4683. },
  4684. /** 启动一个流程实例。
  4685. * @method startProcess
  4686. * @static
  4687. * @methodOf module:queryView
  4688. * @see module:form.startProcess
  4689. */
  4690. "startProcess": function (app, process, data, identity, callback, target, latest, afterCreated, skipDraftCheck) {
  4691. if (arguments.length > 2) {
  4692. for (var i = 2; i < arguments.length; i++) {
  4693. if (typeOf(arguments[i]) == "boolean") {
  4694. target = arguments[i];
  4695. break;
  4696. }
  4697. }
  4698. }
  4699. if (target) {
  4700. if (layout.app && layout.app.inBrowser) {
  4701. //layout.app.content.empty();
  4702. layout.app.$openWithSelf = true;
  4703. }
  4704. }
  4705. if (!app || !process){
  4706. var cmpt = this.getApp();
  4707. o2.requireApp([["process.TaskCenter", "lp."+o2.language], ["process.TaskCenter", ""]],"", function(){
  4708. var obj = {
  4709. "lp": o2.xApplication.process.TaskCenter.LP,
  4710. "content": cmpt.content,
  4711. "addEvent": function(type, fun){
  4712. cmpt.addEvent(type, fun);
  4713. },
  4714. "getAction": function (callback) {
  4715. if (!this.action) {
  4716. this.action = o2.Actions.get("x_processplatform_assemble_surface");
  4717. if (callback) callback();
  4718. } else {
  4719. if (callback) callback();
  4720. }
  4721. },
  4722. "desktop": layout.desktop,
  4723. "refreshAll": function(){},
  4724. "notice": cmpt.notice,
  4725. }
  4726. o2.JSON.get("../x_component_process_TaskCenter/$Main/default/css.wcss", function(data){
  4727. obj.css = data;
  4728. }, false);
  4729. if (!cmpt.processStarter) cmpt.processStarter = new o2.xApplication.process.TaskCenter.Starter(obj);
  4730. cmpt.processStarter.load();
  4731. }, true, true);
  4732. return "";
  4733. }
  4734. var action = MWF.Actions.get("x_processplatform_assemble_surface").getProcessByName(process, app, function (json) {
  4735. if (json.data) {
  4736. MWF.xDesktop.requireApp("process.TaskCenter", "ProcessStarter", function () {
  4737. var starter = new MWF.xApplication.process.TaskCenter.ProcessStarter(json.data, _form.app, {
  4738. "workData": data,
  4739. "identity": identity,
  4740. "latest": latest,
  4741. "skipDraftCheck": skipDraftCheck,
  4742. "onStarted": function (data, title, processName) {
  4743. var application;
  4744. if (data.work){
  4745. var work = data.work;
  4746. var options = {
  4747. "draft": work,
  4748. "draftData":data.data||{},
  4749. "appId": "process.Work"+(new o2.widget.UUID).toString(),
  4750. "desktopReload": false
  4751. };
  4752. if( !layout.inBrowser && afterCreated )options.onPostLoadForm = afterCreated;
  4753. application = layout.desktop.openApplication(null, "process.Work", options);
  4754. }else{
  4755. var currentTask = [];
  4756. data.each(function(work){
  4757. if (work.currentTaskIndex != -1) currentTask.push(work.taskList[work.currentTaskIndex].work);
  4758. }.bind(this));
  4759. if (currentTask.length==1){
  4760. var options = {"workId": currentTask[0], "appId": currentTask[0]};
  4761. if( !layout.inBrowser && afterCreated )options.onPostLoadForm = afterCreated;
  4762. application =layout.desktop.openApplication(null, "process.Work", options);
  4763. }else{}
  4764. }
  4765. // var currentTask = [];
  4766. // data.each(function (work) {
  4767. // if (work.currentTaskIndex != -1) currentTask.push(work.taskList[work.currentTaskIndex].work);
  4768. // }.bind(this));
  4769. //
  4770. // if (currentTask.length == 1) {
  4771. // var options = { "workId": currentTask[0], "appId": currentTask[0] };
  4772. // layout.desktop.openApplication(null, "process.Work", options);
  4773. // } else { }
  4774. if (callback) callback(data);
  4775. if(layout.inBrowser && afterCreated){
  4776. afterCreated(application)
  4777. }
  4778. }.bind(this)
  4779. });
  4780. starter.load();
  4781. }.bind(this));
  4782. }
  4783. });
  4784. }
  4785. //"app": _form.app
  4786. };
  4787. // this.form.currentRouteName = _form.json.currentRouteName;
  4788. // this.form.opinion = _form.json.opinion;
  4789. this.target = ev.target;
  4790. this.event = ev.event;
  4791. this.status = ev.status;
  4792. /**
  4793. * 在前端脚本中,可以通过this.session.user来获取当前用户信息。<br/>
  4794. * @module session
  4795. * @o2cn 当前用户
  4796. * @o2category web
  4797. * @o2ordernumber 110
  4798. * @o2syntax
  4799. * var user = this.session.user;
  4800. * @example
  4801. * //获取当前用户信息
  4802. * var user = this.session.user
  4803. * @return {Object} 当前用户信息,内容和格式如下:
  4804. * <pre><code class='language-js'>{
  4805. * "id": "267a7bcc-f27a-49c8-8364-f1c12061085a", //人员ID
  4806. * "genderType": "m", //性别
  4807. * "icon": "...", //头像
  4808. * "signature": "", //个人签名
  4809. * "name": "张三", //姓名
  4810. * "employee": "zhansan", //员工号
  4811. * "unique": "zhansan", //唯一标识
  4812. * "distinguishedName": "xx@zhansan@P", //人员全称
  4813. * "superior": "", //上级人员id
  4814. * "changePasswordTime": "2017-03-13", //修改密码时间
  4815. * "lastLoginTime": "2019-01-02", //最后登录时间
  4816. * "mail": "zhansan@zoneland.net", //邮件地址
  4817. * "weixin": "", //微信号
  4818. * "qq": "", //QQ
  4819. * "mobile": "18057190078", //手机号码
  4820. * "officePhone": "", //办公电话
  4821. * "createTime": "2017-03-13 12:27:04", //人员创建时间
  4822. * "updateTime": "2019-01-02 13:00:04", //人员修改时间
  4823. * "token": "...", //当前用户token
  4824. * "roleList": [ //人员角色
  4825. * "ProcessPlatformCreator@ProcessPlatformCreatorSystemRole@R",
  4826. * "ProcessPlatformManager@ProcessPlatformManagerSystemRole@R",
  4827. * "Manager@ManagerSystemRole@R"
  4828. * ],
  4829. * "identityList": [ //人员身份列表
  4830. * {
  4831. * "id": "709328c8-44a0-4f5d-a3fa-3c31208232d5", //身份ID
  4832. * "name": "xx", //身份名称
  4833. * "unique": "709328c8-44a0-4f5d-a3fa-3c31208232d5", //身份唯一标识
  4834. * "distinguishedName": "xx@709328c8-44a0-4f5d-a3fa-3c31208232d5@I", //身份全称
  4835. * "person": "267a7bcc-f27a-49c8-8364-f1c12061085a", //人员ID
  4836. * "unit": "d5356fd4-6675-45ad-9a00-5eff20b83dfa", //所属组织ID
  4837. * "unitName": "开发部", //所属组织名称
  4838. * "unitLevel": 2, //所属组织层级
  4839. * "unitLevelName": "兰德纵横/开发部", //所属组织层次名
  4840. * "major": true //是否是主身份
  4841. * },
  4842. * {
  4843. * "id": "343510af-57c2-4a55-a1f2-f30d7af6d284",
  4844. * "description": "",
  4845. * "name": "xx",
  4846. * "unique": "343510af-57c2-4a55-a1f2-f30d7af6d284",
  4847. * "distinguishedName": "xx@343510af-57c2-4a55-a1f2-f30d7af6d284@I",
  4848. * "person": "267a7bcc-f27a-49c8-8364-f1c12061085a",
  4849. * "unit": "108b1b7c-cc78-49ab-9ab1-e67073bd6541",
  4850. * "unitName": "开发部",
  4851. * "unitLevel": 2,
  4852. * "unitLevelName": "浙江兰德纵横/开发部",
  4853. * "major": false
  4854. * }
  4855. * ]
  4856. * }
  4857. * </code></pre>
  4858. */
  4859. this.session = layout.desktop.session;
  4860. /**
  4861. * 本文档说明如何在前台脚本中使用Actions调用平台的RESTful服务。<br/>
  4862. * 通过访问以下地址来查询服务列表:http://server/x_program_center/jest/list.html (v7.2之前版本需要加端口20030)
  4863. * @module Actions
  4864. * @o2cn 服务调用
  4865. * @o2category web
  4866. * @o2ordernumber 130
  4867. * @o2syntax
  4868. * //获取Actions
  4869. * this.Actions
  4870. */
  4871. /**
  4872. * 本平台不同的服务根可能对应不同的域名或端口,您可以使用this.Actions.getHost来获取服务跟对应的host。
  4873. * @method getHost
  4874. * @methodOf module:Actions
  4875. * @static
  4876. * @param {String} root 平台RESTful服务根,具体服务列表参见:http://server/x_program_center/jest/list.html。(v7.2之前版本需要加端口20030)
  4877. *如:<pre><code class='language-js'>
  4878. * "x_processplatform_assemble_surface" //流程平台相关服务根
  4879. * </code></pre>
  4880. * @return {String} 对应服务跟对应的host。如:http://127.0.0.1 (v7.2之前版本可能带端口20020)
  4881. * @o2syntax
  4882. * var actions = this.Actions.getHost( root );
  4883. */
  4884. /**
  4885. * 平台预置了Actions对象用于调用平台提供的服务,您可以使用this.Actions.load来获取这些方法。
  4886. * @method load
  4887. * @methodOf module:Actions
  4888. * @instance
  4889. * @param {String} root 平台RESTful服务根,具体服务列表参见:http://server/x_program_center/jest/list.html (v7.2之前版本需要加端口20030)。
  4890. * 如:
  4891. *<pre><code class='language-js'>
  4892. * "x_processplatform_assemble_surface" //流程平台相关服务根
  4893. * </code></pre>
  4894. * @return {Object} 返回action对象,用于后续服务调用
  4895. * @o2syntax
  4896. * var actions = this.Actions.load( root );
  4897. * @o2syntax
  4898. * //获取流程平台服务对象。
  4899. * var processAction = this.Actions.load("x_processplatform_assemble_surface");
  4900. * @o2syntax
  4901. * <caption>
  4902. * 通过this.Actions.load(root)方法得到action对象,就可以访问此服务下的方法了。<br/>
  4903. * 访问方法的规则如下:
  4904. * </caption>
  4905. * var promise = this.Actions.load( root )[actionName][methodName]( arguements );
  4906. *
  4907. * promise : Promise对象,可以通过promise.then接收返回数据
  4908. * promise.then(
  4909. * function(json){
  4910. * //json为返回的数据
  4911. * }
  4912. * )
  4913. *
  4914. * root : 平台服务根名称,如果 x_processplatform_assemble_surface
  4915. *
  4916. * actionName : 服务下的Action分类名称,如 TaskAction
  4917. *
  4918. * methodName : Action分类下的方法名称,如 get
  4919. *
  4920. * arguements : 需调用的RESTful服务的相关参数。这些参数需要按照先后顺序传入。根据实际情况可以省略某些参数。参数序列分别是:
  4921. *
  4922. * uri的参数, data/formData(Post, Put方法), file(附件), success, failure, async。
  4923. *
  4924. * uri参数:如果有uri有多个参数,需要按先后顺序传入。
  4925. *
  4926. * data(formData)参数:提交到后台的数据,如果是上传附件,传入formData。POST 和 PUT 方法需要传入,GET方法和DELETE方法省略。
  4927. *
  4928. * file参数:POST 或者 PUT方法中有效,当需要上传附件时传入,否则可以省略。
  4929. *
  4930. * success参数:服务执行成功时的回调方法,形如 function(json){
  4931. * json为后台服务传回的数据
  4932. * }。
  4933. *
  4934. * failure 参数:服务执行失败时的回调方法,形如 function(xhr){
  4935. * xhr XmlHttpRequest对象,服务器请求失败时有值
  4936. * return true; //从v6.3开始,返回true, 可以避免系统自动弹出错误信息;否则弹出错误信息。
  4937. * }
  4938. * 此参数可以省略,如果省略,系统会自动弹出错误信息。
  4939. *
  4940. * async : 方法同步或者异步执行,默认为true。
  4941. *
  4942. * urlEncode : 是否对url进行编码,默认为true。
  4943. *
  4944. * cache : 是否使用缓存,默认为true。
  4945. * @o2syntax
  4946. * <caption>
  4947. * 处理返回的数据有两种方式,二选一即可:<br/>
  4948. * 1、该方法return的结果是Promise对象,可以通过 promise.then() 方法来处理。<br/>
  4949. * {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise|Promise说明}<br/>
  4950. * 2、通过success方法作为第一个参数来处理结果
  4951. * </caption>
  4952. * promise.then(
  4953. * function(json){
  4954. * //json为返回的数据
  4955. * }
  4956. * )
  4957. *
  4958. * //success:arguements中的第一个function对象
  4959. * function(json){
  4960. * //json为后台服务传回的数据
  4961. * }
  4962. * @example
  4963. * <caption>
  4964. * <b>样例1:</b>
  4965. * 根据x_processplatform_assemble_surface服务获取当前用户的待办列表:<br/>
  4966. * 可以通过对应服务的查询页面,http://server/x_processplatform_assemble_surface/jest/index.html(v7.2之前版本需要带端口20020)<br/>
  4967. * 可以看到以下界面:<img src="img/module/Actions/Actions.png"/>
  4968. * 我们可以找到TaskAction的V2ListPaging服务是列式当前用户待办的服务。<br/>
  4969. * 该服务有以下信息:<br/>
  4970. * 1、actionName是:TaskAction<br/>
  4971. * 2、methodName是:V2ListPaging<br/>
  4972. * 3、有两个url参数,分别是 page(分页), size(每页数量)<br/>
  4973. * 4、有一系列的body参数<br/>
  4974. * 5、该服务方法类型是POST<br/>
  4975. * 根据这些信息我们可以组织出下面的方法:
  4976. * </caption>
  4977. * var processAction = this.Actions.load("x_processplatform_assemble_surface"); //获取action
  4978. * var method = processAction.TaskAction.V2ListPaging; //获取列式方法
  4979. * //执行方法1
  4980. * method(
  4981. * 1, //uri 第1个参数,如果无uri参数,可以省略
  4982. * 20, //uri 第2个参数,如果无uri参数,可以省略,如果还有其他uri参数,可以用逗号, 分隔
  4983. * { //body 参数,对POST和PUT请求,该参数必须传,可以为空对象
  4984. * processList : [xxx] //具体参数
  4985. * },
  4986. * function(json){ //正确调用的回调
  4987. * //json.data得到服务返回数据
  4988. * },
  4989. * function(xhr){ //可选,错误调用的回调
  4990. * //xhr为XmlHttpRequest对象,服务器请求失败时有值
  4991. * var responseJSON = JSON.parse( xhr.responseText ) //xhr.responseText {String}是后台返回的出错信息
  4992. * //responseJSON见下面的说明
  4993. *
  4994. * var message = responseJSON.message; //message为错误提示文本
  4995. * },
  4996. * true //可选,true为异步调用,false为同步调用,默认为true
  4997. * );
  4998. *
  4999. * //执行方法2
  5000. * var promise = method( 1, 20, {processList : [xxx]} )
  5001. * promise.then( function(json){
  5002. * //json.data得到服务返回数据
  5003. * })
  5004. * @example
  5005. * <caption>出错信息responseJSON的格式</caption>
  5006. * {
  5007. * "type": "error", //类型为错误
  5008. * "message": "标识为:343434 的 Task 对象不存在.", //提示文本
  5009. * "date": "2020-12-29 17:02:13", //出错时间
  5010. * "prompt": "com.x.base.core.project.exception.ExceptionEntityNotExist" //后台错误类
  5011. *}
  5012. * @example
  5013. * <caption>
  5014. * <b>样例2:</b>
  5015. * 已知流程实例的workid,在脚本中获取数据,修改后进行保存。
  5016. * </caption>
  5017. * //查询服务列表找到获取data数据服务为DataAction的getWithWork方法
  5018. * //查询服务列表找到更新data数据服务为DataAction的updateWithWork方法
  5019. *
  5020. * var workid = "cce8bc22-225a-4f85-8132-7374d546886e";
  5021. * var data;
  5022. * this.Actions.load("x_processplatform_assemble_surface").DataAction.getWithWork( //平台封装好的方法
  5023. * workid, //uri的参数
  5024. * function( json ){ //服务调用成功的回调函数, json为服务传回的数据
  5025. * data = json.data; //为变量data赋值
  5026. * }.bind(this),
  5027. * false //同步执行
  5028. * )
  5029. *
  5030. * data.subject = "新标题"; //修改数据
  5031. * this.Actions.load("x_processplatform_assemble_surface").DataAction.updateWithWork(
  5032. * workid, //uri的参数
  5033. * data, //保存的数据
  5034. * function(){ //服务调用成功的回调函数
  5035. * o2.xDesktop.notice("success", {"y":"top", "x": "right"}, "保存成功"); //提示,{"y":"top", "x": "right"}指提示框在顶部右边
  5036. * }.bind(this)
  5037. * );
  5038. */
  5039. /**
  5040. * <b>已过时。</b>平台预置了Action的调用方法,您可以使用this.Actions.get来获取这些方法。RESTful配置文件在{服务器目录}/webServer/o2_core/o2/xAction/services下。
  5041. * @method get
  5042. * @deprecated
  5043. * @methodOf module:Actions
  5044. * @instance
  5045. * @param {String} root 平台RESTful服务根,具体服务列表参见:http://server/x_program_center/jest/list.html(v7.2之前版本需要加端口20030)。
  5046. *如:<pre><code class='language-js'>
  5047. * "x_processplatform_assemble_surface" //流程平台相关服务根
  5048. * </code></pre>
  5049. * @return {String} 对应服务根的host。如:http://127.0.0.1 (v7.2之前版本可能带端口20020)
  5050. * @o2syntax
  5051. * var actions = this.Actions.get( root );
  5052. * actions[ methodName ]( arguements );
  5053. *
  5054. * or
  5055. *
  5056. * this.Actions.get( root )[methodName]( arguements );
  5057. * @o2syntax
  5058. * methodName :(string)方法名称。
  5059. * arguements : 见load方法的arguements说明
  5060. * @example
  5061. * <caption><b>样例一:</b>已知流程实例的workid,在脚本中获取数据,修改后进行保存。</caption>
  5062. * //现已知获取数据的方法名称是 getWorkData uri为: /jaxrs/data/work/{workid}
  5063. * //已知更新数据的方法名称是 saveData uri为: /jaxrs/data/work/{workid}
  5064. * var workid = "cce8bc22-225a-4f85-8132-7374d546886e";
  5065. * var action = this.Actions.get("x_processplatform_assemble_surface");
  5066. * var data;
  5067. * action.getWorkData( //平台封装好的方法
  5068. * workid, //uri的参数
  5069. * function( json ){ //服务调用成功的回调函数, json为服务传回的数据
  5070. * data = json.data; //为变量data赋值
  5071. * }.bind(this),
  5072. * false //同步执行
  5073. * );
  5074. * data.subject = "新标题"; //修改数据
  5075. * action.saveData(
  5076. * workid, //uri的参数
  5077. * data, //保存的数据
  5078. * function(){ //服务调用成功的回调函数
  5079. * o2.xDesktop.notice("success", {"y":"top", "x": "right"}, "保存成功"); //提示,{"y":"top", "x": "right"}指提示框在顶部右边
  5080. * }.bind(this)
  5081. * );
  5082. * @example
  5083. * <caption><b>样例二:</b>已知流程应用的workid,分页列式出流程实例。</caption>
  5084. * //现已知获取数据的方法名称是 listWorkNext uri为: {"uri": "/jaxrs/work/list/{id}/next/{count}/application/{applicationId}"},
  5085. * var id = "(0)"; //如果是第一页id是(0),否则传上一页最后一个流程实例的id
  5086. * var count = 10;
  5087. * var applicationId = "dde8bc22-225a-4f85-8132-7374d546886e";
  5088. * this.Actions.get("x_processplatform_assemble_surface").listWorkNext(
  5089. * id, //listWorkNext服务有3个uri参数,要按先后顺序列出
  5090. * count,
  5091. * applicationId,
  5092. * function( json ){
  5093. * //json.data
  5094. * }.bind(this)
  5095. * );
  5096. */
  5097. this.Actions = o2.Actions;
  5098. this.query = function (option) {
  5099. // options = {
  5100. // "name": "statementName",
  5101. // "data": "json data",
  5102. // "firstResult": 1,
  5103. // "maxResults": 100,
  5104. // "success": function(){},
  5105. // "error": function(){},
  5106. // "async": true or false, default is true
  5107. // }
  5108. if (option) {
  5109. var json = (option.data) || {};
  5110. if (option.firstResult) json.firstResult = option.firstResult.toInt();
  5111. if (option.maxResults) json.maxResults = option.maxResults.toInt();
  5112. o2.Actions.get("x_query_assemble_surface").executeStatement(option.name, json, success, error, options.async);
  5113. }
  5114. };
  5115. /**
  5116. * this.Table是一个工具类,您可以使用这个类对数据中心的数据表进行增删改查操作。
  5117. * @module Table
  5118. * @o2cn 数据表执行
  5119. * @o2category web
  5120. * @o2ordernumber 135
  5121. * @param {String} tableName 数据表的id、名称或别名。
  5122. * @return {Object} table对象
  5123. * @o2syntax
  5124. * //您可以在页面、表单、流程各个嵌入脚本中,通过this.Table()来返回Table的对象,如下:
  5125. * var table = new this.Table( tableName )
  5126. */
  5127. /**
  5128. * 列示表中的行对象,下一页。
  5129. * @method listRowNext
  5130. * @methodOf module:Table
  5131. * @instance
  5132. * @param {String} id 当前页最后一条数据的Id,如果是第一页使用"(0)"。
  5133. * @param {String|Number} count 下一页的行数
  5134. * @param {Function} [success] 调用成功时的回调函数。
  5135. * @param {Function} [failure] 调用错误时的回调函数。
  5136. * @param {Boolean} [async] 是否异步调用,默认为true。
  5137. * @return {Promise} 返回Promise
  5138. * @o2syntax
  5139. * table.listRowNext( id, count, success, failure, async )
  5140. * //或
  5141. * var promise = table.listRowNext( id, count );
  5142. * promise.then(function(json){
  5143. * //json为返回的数据
  5144. * })
  5145. * @example
  5146. * var table = new this.Table("table1");
  5147. *
  5148. * table.listRowNext( "0", 20, function(data){
  5149. * //data 形如
  5150. * //{
  5151. * // "type": "success",
  5152. * // "data":[
  5153. * // {
  5154. * // "id": "5584e6d1-8088-4694-a948-8968ac8d4923", //数据的id
  5155. * // "createTime": "2021-11-01 16:23:41", //数据创建时间
  5156. * // "updateTime": "2021-11-01 16:23:41", //数据更新时间
  5157. * // ... //定义的字段(列)和值
  5158. * // }
  5159. * // ],
  5160. * // "message": "",
  5161. * // "date": "2021-11-01 18:34:19",
  5162. * // "spent": 13,
  5163. * //}
  5164. * }, function(xhr){
  5165. * //xhr 为 xmlHttpRequest
  5166. * });
  5167. */
  5168. /**
  5169. * 列示表中的行对象,上一页。
  5170. * @method listRowPrev
  5171. * @methodOf module:Table
  5172. * @instance
  5173. * @param {String} id 当前页第一条数据的Id,如果是最后一页使用"(0)"。
  5174. * @param {String|Number} count 上一页的行数
  5175. * @param {Function} [success] 调用成功时的回调函数。
  5176. * @param {Function} [failure] 调用错误时的回调函数。
  5177. * @param {Boolean} [async] 是否异步调用,默认为true。
  5178. * @return {Promise} 返回Promise
  5179. * @o2syntax
  5180. * table.listRowPrev( id, count, success, failure, async )
  5181. * //或
  5182. * var promise = table.listRowPrev( id, count );
  5183. * promise.then(function(json){
  5184. * //json为返回的数据
  5185. * })
  5186. * @example
  5187. * var table = new this.Table("table1");
  5188. *
  5189. * table.listRowPrev( "0", 20, function(data){
  5190. * //data 形如
  5191. * //{
  5192. * // "type": "success",
  5193. * // "data":[
  5194. * // {
  5195. * // "id": "5584e6d1-8088-4694-a948-8968ac8d4923", //数据的id
  5196. * // "createTime": "2021-11-01 16:23:41", //数据创建时间
  5197. * // "updateTime": "2021-11-01 16:23:41", //数据更新时间
  5198. * // ... //定义的字段(列)和值
  5199. * // }
  5200. * // ],
  5201. * // "message": "",
  5202. * // "date": "2021-11-01 18:34:19",
  5203. * // "spent": 13,
  5204. * //}
  5205. * }, function(xhr){
  5206. * //xhr 为 xmlHttpRequest
  5207. * });
  5208. */
  5209. /**
  5210. * 根据条件获取表中的数据。
  5211. * @method listRowSelect
  5212. * @methodOf module:Table
  5213. * @instance
  5214. * @param {String} [where] 查询条件,格式为jpql语法,o.name='zhangsan',允许为空。
  5215. * @param {String} [orderBy] 排序条件,格式为:o.updateTime desc,允许为空
  5216. * @param {String|Number} [size] 返回结果集数量,允许为空。
  5217. * @param {Function} [success] 调用成功时的回调函数。
  5218. * @param {Function} [failure] 调用错误时的回调函数。
  5219. * @param {Boolean} [async] 是否异步调用,默认为true。
  5220. * @return {Promise} 返回Promise
  5221. * @o2syntax
  5222. * table.listRowSelect( where, orderBy, size, success, failure, async )
  5223. * //或
  5224. * var promise = table.listRowSelect( where, orderBy, size );
  5225. * promise.then(function(json){
  5226. * //json为返回的数据
  5227. * })
  5228. * @example
  5229. * var table = new this.Table("table1");
  5230. *
  5231. * //查询字段name等于zhangsan的数据,结果按updateTime倒序
  5232. * table.listRowSelect( "o.name='zhangsan'", "o.updateTime desc", 20, function(data){
  5233. * //data 形如
  5234. * //{
  5235. * // "type": "success",
  5236. * // "data":[
  5237. * // {
  5238. * // "id": "5584e6d1-8088-4694-a948-8968ac8d4923", //数据的id
  5239. * // "createTime": "2021-11-01 16:23:41", //数据创建时间
  5240. * // "updateTime": "2021-11-01 16:23:41", //数据更新时间
  5241. * // ... //定义的字段(列)和值
  5242. * // }
  5243. * // ],
  5244. * // "message": "",
  5245. * // "date": "2021-11-01 18:34:19",
  5246. * // "spent": 13,
  5247. * //}
  5248. * }, function(xhr){
  5249. * //xhr 为 xmlHttpRequest
  5250. * });
  5251. */
  5252. /**
  5253. * 通过where 统计数量。
  5254. * @method rowCountWhere
  5255. * @methodOf module:Table
  5256. * @instance
  5257. * @param {String} where 查询条件,格式为jpql语法,o.name='zhangsan'。
  5258. * @param {Function} [success] 调用成功时的回调函数。
  5259. * @param {Function} [failure] 调用错误时的回调函数。
  5260. * @param {Boolean} [async] 是否异步调用,默认为true。
  5261. * @return {Promise} 返回Promise
  5262. * @o2syntax
  5263. * table.rowCountWhere( where, success, failure, async )
  5264. * //或
  5265. * var promise = table.rowCountWhere( where );
  5266. * promise.then(function(json){
  5267. * //json为返回的数据
  5268. * })
  5269. * @example
  5270. * var table = new this.Table("table1");
  5271. *
  5272. * //查询字段name等于zhangsan的数据,结果按updateTime倒序
  5273. * table.rowCountWhere( "o.name='zhangsan", function(data){
  5274. * //data 形如
  5275. * //{
  5276. * // "type": "success",
  5277. * // "data": {
  5278. * // "value": 5 //符合条件数据的总条数
  5279. * // },
  5280. * // "message": "",
  5281. * // "date": "2021-11-01 18:32:27"
  5282. * //}
  5283. * }, function(xhr){
  5284. * //xhr 为 xmlHttpRequest
  5285. * });
  5286. */
  5287. /**
  5288. * 删除数据表中指定id的记录。
  5289. * @method deleteRow
  5290. * @methodOf module:Table
  5291. * @instance
  5292. * @param {String} id 需要删除记录的id。
  5293. * @param {Function} [success] 调用成功时的回调函数。
  5294. * @param {Function} [failure] 调用错误时的回调函数。
  5295. * @param {Boolean} [async] 是否异步调用,默认为true。
  5296. * @return {Promise} 返回Promise
  5297. * @o2syntax
  5298. * table.deleteRow( id, success, failure, async )
  5299. * //或
  5300. * var promise = table.deleteRow( id );
  5301. * promise.then(function(json){
  5302. * //json为返回的数据
  5303. * })
  5304. * @example
  5305. * var table = new this.Table("table1");
  5306. *
  5307. * table.deleteRow( "e1f89185-d8b0-4b66-9e34-aed3323d0d79", function(data){
  5308. * //data 形如
  5309. * //{
  5310. * // "type": "success",
  5311. * // "data": {
  5312. * // "value": true //true表示删除成功,false表示无此数据
  5313. * // },
  5314. * // "message": "",
  5315. * // "date": "2021-11-01 18:32:27"
  5316. * //}
  5317. * }, function(xhr){
  5318. * //xhr 为 xmlHttpRequest
  5319. * });
  5320. */
  5321. /**
  5322. * 删除指定表中所有行的数据。
  5323. * @method deleteAllRow
  5324. * @methodOf module:Table
  5325. * @instance
  5326. * @param {Function} [success] 调用成功时的回调函数。
  5327. * @param {Function} [failure] 调用错误时的回调函数。
  5328. * @param {Boolean} [async] 是否异步调用,默认为true。
  5329. * @return {Promise} 返回Promise
  5330. * @o2syntax
  5331. * table.deleteAllRow( success, failure, async )
  5332. * //或
  5333. * var promise = table.deleteAllRow();
  5334. * promise.then(function(json){
  5335. * //json为返回的数据
  5336. * })
  5337. * @example
  5338. * var table = new this.Table("table1");
  5339. *
  5340. * table.deleteAllRow( function(data){
  5341. * //data 形如
  5342. * //{
  5343. * // "type": "success",
  5344. * // "data": {
  5345. * // "value": 1 //表示删除的条数,0表示无数据
  5346. * // },
  5347. * // "message": "",
  5348. * // "date": "2021-11-01 18:32:27"
  5349. * //}
  5350. * }, function(xhr){
  5351. * //xhr 为 xmlHttpRequest
  5352. * });
  5353. */
  5354. /**
  5355. * 获取数据表中指定id的记录。
  5356. * @method getRow
  5357. * @methodOf module:Table
  5358. * @instance
  5359. * @param {id} 需要获取记录的id。
  5360. * @param {Function} [success] 调用成功时的回调函数。
  5361. * @param {Function} [failure] 调用错误时的回调函数。
  5362. * @param {Boolean} [async] 是否异步调用,默认为true。
  5363. * @return {Promise} 返回Promise
  5364. * @o2syntax
  5365. * table.getRow( id, success, failure, async )
  5366. * //或
  5367. * var promise = table.getRow( id );
  5368. * promise.then(function(json){
  5369. * //json为返回的数据
  5370. * })
  5371. * @example
  5372. * var table = new this.Table("table1");
  5373. *
  5374. * table.getRow( "e1f89185-d8b0-4b66-9e34-aed3323d0d79", function(data){
  5375. * //data 形如
  5376. * //{
  5377. * // "type": "success",
  5378. * // "data":{
  5379. * // "id": "5584e6d1-8088-4694-a948-8968ac8d4923", //数据的id
  5380. * // "createTime": "2021-11-01 16:23:41", //数据创建时间
  5381. * // "updateTime": "2021-11-01 16:23:41", //数据更新时间
  5382. * // ... //定义的字段(列)和值
  5383. * // },
  5384. * // "message": "",
  5385. * // "date": "2021-11-01 18:34:19",
  5386. * // "spent": 13,
  5387. * //}
  5388. * }, function(xhr){
  5389. * //xhr 为 xmlHttpRequest
  5390. * });
  5391. */
  5392. /**
  5393. * 往数据表中批量插入数据。
  5394. * @method insertRow
  5395. * @methodOf module:Table
  5396. * @instance
  5397. * @param {Object[]} data 需要插入的数据。
  5398. * @param {Function} [success] 调用成功时的回调函数。
  5399. * @param {Function} [failure] 调用错误时的回调函数。
  5400. * @param {Boolean} [async] 是否异步调用,默认为true。
  5401. * @return {Promise} 返回Promise
  5402. * @o2syntax
  5403. * table.insertRow( data, success, failure, async )
  5404. * //或
  5405. * var promise = table.insertRow( data );
  5406. * promise.then(function(json){
  5407. * //json为返回的数据
  5408. * })
  5409. * @example
  5410. * var table = new this.Table("table1");
  5411. * var data = [
  5412. * {
  5413. * "subject": "标题一",
  5414. * ... //其他字段
  5415. * },
  5416. * ...
  5417. * ];
  5418. * table.insertRow( data, function(data){
  5419. * //data 形如
  5420. * //{
  5421. * // "type": "success",
  5422. * // "data": {
  5423. * // "value": true //true表示插入成功
  5424. * // },
  5425. * // "message": "",
  5426. * // "date": "2021-11-01 18:32:27"
  5427. * //}
  5428. * }, function(xhr){
  5429. * //xhr 为 xmlHttpRequest
  5430. * });
  5431. */
  5432. /**
  5433. * 往数据表中插入单条数据。
  5434. * @method addRow
  5435. * @methodOf module:Table
  5436. * @instance
  5437. * @param {Object} data 需要插入的数据。
  5438. * @param {Function} [success] 调用成功时的回调函数。
  5439. * @param {Function} [failure] 调用错误时的回调函数。
  5440. * @param {Boolean} [async] 是否异步调用,默认为true。
  5441. * @return {Promise} 返回Promise
  5442. * @o2syntax
  5443. * table.addRow( data, success, failure, async )
  5444. * //或
  5445. * var promise = table.addRow( data );
  5446. * promise.then(function(json){
  5447. * //json为返回的数据
  5448. * })
  5449. * @example
  5450. * var table = new this.Table("table1");
  5451. * var data = {
  5452. * "subject": "标题一",
  5453. * ... //其他字段
  5454. * };
  5455. * table.addRow( data, function(data){
  5456. * //data 形如
  5457. * //{
  5458. * // "type": "success",
  5459. * // "data": {
  5460. * // "id": 2cf3a20d-b166-490b-8d29-05544db3d79b //true表示修改成功
  5461. * // },
  5462. * // "message": "",
  5463. * // "date": "2021-11-01 18:32:27"
  5464. * //}
  5465. * }, function(xhr){
  5466. * //xhr 为 xmlHttpRequest
  5467. * });
  5468. */
  5469. /**
  5470. * 往数据表中修改单条数据。
  5471. * @method updateRow
  5472. * @methodOf module:Table
  5473. * @instance
  5474. * @param {String} id 需要修改的数据id。
  5475. * @param {Object} data 需要修改的数据。
  5476. * @param {Function} [success] 调用成功时的回调函数。
  5477. * @param {Function} [failure] 调用错误时的回调函数。
  5478. * @param {Boolean} [async] 是否异步调用,默认为true。
  5479. * @return {Promise} 返回Promise
  5480. * @o2syntax
  5481. * table.updateRow( id, data, success, failure, async )
  5482. * //或
  5483. * var promise = table.updateRow( id, data );
  5484. * promise.then(function(json){
  5485. * //json为返回的数据
  5486. * })
  5487. * @example
  5488. * var table = new this.Table("table1");
  5489. * var data = {
  5490. * "id" : "2cf3a20d-b166-490b-8d29-05544db3d79b",
  5491. * "subject": "标题一",
  5492. * ... //其他字段
  5493. * };
  5494. * table.updateRow( "2cf3a20d-b166-490b-8d29-05544db3d79b", data, function(data){
  5495. * //data 形如
  5496. * //{
  5497. * // "type": "success",
  5498. * // "data": {
  5499. * // "value": true //true表示修改成功
  5500. * // },
  5501. * // "message": "",
  5502. * // "date": "2021-11-01 18:32:27"
  5503. * //}
  5504. * }, function(xhr){
  5505. * //xhr 为 xmlHttpRequest
  5506. * });
  5507. */
  5508. this.Table = MWF.xScript.createTable();
  5509. };
  5510. if( !MWF.xScript.createTable )MWF.xScript.createTable = function(){
  5511. return function(name){
  5512. this.name = name;
  5513. this.action = o2.Actions.load("x_query_assemble_surface").TableAction;
  5514. this.listRowNext = function(id, count, success, error, async){
  5515. return this.action.listRowNext(this.name, id, count, success, error, async);
  5516. };
  5517. this.listRowPrev = function(id, count, success, error, async){
  5518. return this.action.listRowPrev(this.name, id, count, success, error, async);
  5519. };
  5520. this.listRowSelect = function(where, orderBy, size, success, error, async){
  5521. return this.action.listRowSelect(this.name, {"where": where, "orderBy": orderBy, "size": size || ""}, success, error, async);
  5522. };
  5523. this.listRowSelectWhere = function(where, success, error, async){
  5524. return this.action.listRowSelectWhere(this.name, where, success, error, async);
  5525. };
  5526. this.rowCountWhere = function(where, success, error, async){
  5527. return this.action.rowCountWhere(this.name, where, success, error, async);
  5528. };
  5529. this.deleteRow = function(id, success, error, async){
  5530. return this.action.rowDelete(this.name, id, success, error, async);
  5531. };
  5532. this.deleteAllRow = function(success, error, async){
  5533. return this.action.rowDeleteAll(this.name, success, error, async);
  5534. };
  5535. this.getRow = function(id, success, error, async){
  5536. return this.action.rowGet(this.name, id, success, error, async);
  5537. };
  5538. this.insertRow = function(data, success, error, async){
  5539. return this.action.rowInsert(this.name, data, success, error, async);
  5540. };
  5541. this.addRow = function(data, success, error, async){
  5542. return this.action.rowInsertOne(this.name, data, success, error, async);
  5543. };
  5544. this.updateRow = function(id, data, success, error, async){
  5545. return this.action.rowUpdate(this.name, id, data, success, error, async);
  5546. };
  5547. }
  5548. };
  5549. if( !MWF.xScript.dictLoaded )MWF.xScript.dictLoaded = {};
  5550. if( !MWF.xScript.createDict ){
  5551. MWF.xScript.addDictToCache = function ( options, path, json ) {
  5552. if( !path )path = "root";
  5553. if( path.indexOf("root") !== 0 )path = "root." + path ;
  5554. var type = options.appType || "process";
  5555. var enableAnonymous = ( options.enableAnonymous || options.anonymous ) || false;
  5556. var appFlagList = [];
  5557. if( options.application )appFlagList.push( options.application );
  5558. if( options.appId )appFlagList.push( options.appId );
  5559. if( options.appName )appFlagList.push( options.appName );
  5560. if( options.appAlias )appFlagList.push( options.appAlias );
  5561. var dictFlagList = [];
  5562. if( options.id )dictFlagList.push( options.id );
  5563. if( options.name )dictFlagList.push( options.name );
  5564. if( options.alias )dictFlagList.push( options.alias );
  5565. var cache = {};
  5566. cache[path] = json;
  5567. for( var i=0; i<appFlagList.length; i++ ){
  5568. for( var j=0; j<dictFlagList.length; j++ ){
  5569. var k = dictFlagList[j] + type + appFlagList[i] + enableAnonymous;
  5570. if( !MWF.xScript.dictLoaded[k] ){
  5571. MWF.xScript.dictLoaded[k] = cache; //指向同一个对象
  5572. // MWF.xScript.dictLoaded[k][path] = json; //指向不同的对象
  5573. }else if( i===0 && j===0 ){
  5574. MWF.xScript.setDictToCache( k, path ,json );
  5575. var arr = path.split(/\./g);
  5576. var p;
  5577. var cache = MWF.xScript.dictLoaded[k];
  5578. for( var l=0 ; l<arr.length; l++ ){
  5579. p = l === 0 ? arr[0] : ( p + "." + arr[l] );
  5580. if( cache[ p ] )break;
  5581. }
  5582. if( p ){
  5583. var mathP = p+".";
  5584. Object.keys( cache ).each( function( path, idx){
  5585. if( path.indexOf( mathP ) === 0 )delete cache[path];
  5586. })
  5587. }
  5588. }
  5589. }
  5590. }
  5591. };
  5592. MWF.xScript.getMatchedDict = function(key, path){
  5593. if( !path )path = "root";
  5594. if( path.indexOf("root") !== 0 )path = "root." + path ;
  5595. var arr = path.split(/\./g);
  5596. if( MWF.xScript.dictLoaded[key] ){
  5597. var dicts = MWF.xScript.dictLoaded[key];
  5598. var list = Array.clone(arr);
  5599. var p;
  5600. var dict;
  5601. for( var i=0 ; i<arr.length; i++ ){
  5602. p = i === 0 ? arr[0] : ( p + "." + arr[i] );
  5603. list.shift();
  5604. if( dicts[ p ] ){
  5605. dict = dicts[ p ];
  5606. break;
  5607. }
  5608. }
  5609. return {
  5610. dict : dict,
  5611. unmatchedPathList : list
  5612. }
  5613. }
  5614. return {
  5615. dict : null,
  5616. unmatchedPathList : list
  5617. }
  5618. };
  5619. MWF.xScript.insertDictToCache = function(key, path, json){
  5620. var p = path;
  5621. if( !p )p = "root";
  5622. if( p.indexOf("root") !== 0 )p = "root." + p ;
  5623. if( MWF.xScript.dictLoaded[key] ){
  5624. var matchedDict = MWF.xScript.getMatchedDict( key, path );
  5625. var dict = matchedDict.dict;
  5626. var list = matchedDict.unmatchedPathList;
  5627. if( !dict ){
  5628. MWF.xScript.dictLoaded[key][p] = json;
  5629. }else if( !list || list.length === 0 ){
  5630. MWF.xScript.dictLoaded[key][p] = json;
  5631. }else{
  5632. for( var j=0; j<list.length-1; j++ ){
  5633. if( !dict[ list[j] ] ){
  5634. dict[ list[j] ] = {};
  5635. }
  5636. dict = dict[ list[j] ];
  5637. }
  5638. var lastPath = list[list.length-1];
  5639. if( !dict[lastPath] ){
  5640. dict[lastPath] = json;
  5641. }else if( typeOf( dict[lastPath] ) === "array" ){
  5642. dict[lastPath].push( json );
  5643. }
  5644. }
  5645. }else{
  5646. MWF.xScript.dictLoaded[key] = {};
  5647. MWF.xScript.dictLoaded[key][p] = json;
  5648. }
  5649. };
  5650. MWF.xScript.setDictToCache = function(key, path, json){
  5651. var p = path;
  5652. if( !p )p = "root";
  5653. if( p.indexOf("root") !== 0 )p = "root." + p ;
  5654. if( MWF.xScript.dictLoaded[key] ){
  5655. var matchedDict = MWF.xScript.getMatchedDict( key, path );
  5656. var dict = matchedDict.dict;
  5657. var list = matchedDict.unmatchedPathList;
  5658. if( !dict ){
  5659. MWF.xScript.dictLoaded[key][p] = json;
  5660. }else if( !list || list.length === 0 ){
  5661. MWF.xScript.dictLoaded[key][p] = json;
  5662. }else{
  5663. for( var j=0; j<list.length-1; j++ ){
  5664. if( !dict[ list[j] ] ){
  5665. dict[ list[j] ] = {};
  5666. }
  5667. dict = dict[ list[j] ];
  5668. }
  5669. dict[list[list.length-1]] = json;
  5670. }
  5671. }else{
  5672. MWF.xScript.dictLoaded[key] = {};
  5673. MWF.xScript.dictLoaded[key][p] = json;
  5674. }
  5675. };
  5676. MWF.xScript.getDictFromCache = function( key, path ){
  5677. var matchedDict = MWF.xScript.getMatchedDict( key, path );
  5678. var dict = matchedDict.dict;
  5679. var list = matchedDict.unmatchedPathList;
  5680. if( dict ){
  5681. for( var j=0; j<list.length; j++ ){
  5682. dict = dict[ list[j] ];
  5683. if( !dict )return null;
  5684. }
  5685. return dict;
  5686. }
  5687. return null;
  5688. };
  5689. MWF.xScript.deleteDictToCache = function(key, path){
  5690. var matchedDict = MWF.xScript.getMatchedDict( key, path );
  5691. var dict = matchedDict.dict;
  5692. var list = matchedDict.unmatchedPathList;
  5693. if( dict){
  5694. for( var j=0; j<list.length-1; j++ ){
  5695. dict = dict[ list[j] ];
  5696. if( !dict )return;
  5697. }
  5698. if( list.length ){
  5699. delete dict[list[list.length-1]];
  5700. }
  5701. }
  5702. };
  5703. MWF.xScript.createDict = function(application, appType){
  5704. //optionsOrName : {
  5705. // type : "", //默认为process, 可以为 process cms
  5706. // application : "", //流程/CMS的名称/别名/id, 默认为当前应用
  5707. // name : "", // 数据字典名称/别名/id
  5708. // anonymous : false //允许在未登录的情况下读取CMS的数据字典, 改参数名也可以是enableAnonymous
  5709. //}
  5710. //或者name: "" // 数据字典名称/别名/id
  5711. return function(optionsOrName){
  5712. var options = optionsOrName;
  5713. if( typeOf( options ) == "string" ){
  5714. options = {
  5715. name : options,
  5716. type: appType,
  5717. application: application
  5718. };
  5719. }
  5720. var name = this.name = options.name;
  5721. var type;
  5722. if( options.type === "service"){
  5723. type = options.type;
  5724. }else{
  5725. type = ( options.type && options.application ) ? options.type : "process";
  5726. }
  5727. var applicationId = options.application || application;
  5728. var enableAnonymous = ( options.enableAnonymous || options.anonymous ) || false;
  5729. var opt = {
  5730. "appType" : type,
  5731. "name" : name,
  5732. "appId" : applicationId,
  5733. "enableAnonymous" : enableAnonymous
  5734. };
  5735. var key = name+type+applicationId+enableAnonymous;
  5736. // if (!dictLoaded[key]) dictLoaded[key] = {};
  5737. // this.dictData = dictLoaded[key];
  5738. //MWF.require("MWF.xScript.Actions.DictActions", null, false);
  5739. var action;
  5740. if (type === "cms") {
  5741. action = MWF.Actions.get("x_cms_assemble_control");
  5742. } else if( type === "portal" ){
  5743. action = MWF.Actions.get("x_portal_assemble_surface");
  5744. }else if( type === "service" ){
  5745. key = name+type+enableAnonymous;
  5746. action = MWF.Actions.get("x_program_center");
  5747. } else {
  5748. action = MWF.Actions.get("x_processplatform_assemble_surface");
  5749. }
  5750. var encodePath = function( path ){
  5751. var arr = path.split(/\./g);
  5752. var ar = arr.map(function(v){
  5753. return encodeURIComponent(v);
  5754. });
  5755. return ( type === "portal" || type === "service" ) ? ar.join(".") : ar.join("/");
  5756. };
  5757. this.get = function(path, success, failure, async, refresh){
  5758. var value = null;
  5759. if (success===true) async=true;
  5760. if (failure===true) async=true;
  5761. if (!refresh ){
  5762. var data = MWF.xScript.getDictFromCache( key, path );
  5763. if( data ){
  5764. if (success && o2.typeOf(success)=="function") success( data );
  5765. if( !!async ){
  5766. return Promise.resolve( data );
  5767. }else{
  5768. return data;
  5769. }
  5770. }
  5771. }
  5772. // var cb = function(json){
  5773. // value = json.data;
  5774. // MWF.xScript.addDictToCache(opt, path, value);
  5775. // if (success && o2.typeOf(success)=="function") value = success(json.data);
  5776. // return value;
  5777. // }.ag().catch(function(xhr, text, error){ if (failure && o2.typeOf(failure)=="function") return failure(xhr, text, error); });
  5778. var cb = function(json){
  5779. value = json.data;
  5780. MWF.xScript.addDictToCache(opt, path, value);
  5781. if (success && o2.typeOf(success)=="function") value = success(json.data);
  5782. return value;
  5783. };
  5784. var promise;
  5785. if( type === "service" ){
  5786. if (path){
  5787. var p = encodePath( path );
  5788. promise = action.getDictData(encodeURIComponent(this.name), p, cb, null, !!async, false);
  5789. }else{
  5790. promise = action.getDictRoot(this.name, cb, null, !!async, false);
  5791. }
  5792. }else{
  5793. if (path){
  5794. var p = encodePath( path );
  5795. promise = action[ ( (enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData" ) ](encodeURIComponent(this.name), applicationId, p, cb, null, !!async, false);
  5796. }else{
  5797. promise = action[ ( (enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot" ) ](this.name, applicationId, cb, null, !!async, false);
  5798. }
  5799. }
  5800. return (!!async) ? promise : value;
  5801. // if (path){
  5802. // var p = encodePath( path );
  5803. // //var p = path.replace(/\./g, "/");
  5804. // action[ ( (enableAnonymous && type == "cms") ? "getDictDataAnonymous" : "getDictData" ) ](encodeURIComponent(this.name), applicationId, p, function(json){
  5805. // value = json.data;
  5806. // // this.dictData[path] = value;
  5807. // MWF.xScript.addDictToCache(opt, path, value);
  5808. // if (success) success(json.data);
  5809. // }.bind(this), function(xhr, text, error){
  5810. // if (failure) failure(xhr, text, error);
  5811. // }, !!async);
  5812. // }else{
  5813. // action[ ( (enableAnonymous && type == "cms") ? "getDictRootAnonymous" : "getDictRoot" ) ](this.name, applicationId, function(json){
  5814. // value = json.data;
  5815. // // this.dictData["root"] = value;
  5816. // MWF.xScript.addDictToCache(opt, path, value);
  5817. // if (success) success(json.data);
  5818. // }.bind(this), function(xhr, text, error){
  5819. // if (failure) failure(xhr, text, error);
  5820. // }, !!async);
  5821. // }
  5822. //return value;
  5823. };
  5824. this.set = function(path, value, success, failure){
  5825. var p = encodePath( path );
  5826. //var p = path.replace(/\./g, "/");
  5827. var successCallback = function(json){
  5828. MWF.xScript.setDictToCache(key, path, value);
  5829. if (success) return success(json.data);
  5830. };
  5831. var failureCallback = function(xhr, text, error){
  5832. if (failure) return failure(xhr, text, error);
  5833. };
  5834. if( type === "service" ){
  5835. return action.setDictData(encodeURIComponent(this.name), p, value, successCallback, failureCallback, false, false);
  5836. }else{
  5837. return action.setDictData(encodeURIComponent(this.name), applicationId, p, value, successCallback, failureCallback, false, false);
  5838. }
  5839. };
  5840. this.add = function(path, value, success, failure){
  5841. var p = encodePath( path );
  5842. //var p = path.replace(/\./g, "/");
  5843. var successCallback = function(json){
  5844. MWF.xScript.insertDictToCache(key, path, value);
  5845. if (success) return success(json.data);
  5846. };
  5847. var failureCallback = function(xhr, text, error){
  5848. if (failure) return failure(xhr, text, error);
  5849. };
  5850. if( type === "service" ) {
  5851. return action.addDictData(encodeURIComponent(this.name), p, value, successCallback, failureCallback, false, false);
  5852. }else{
  5853. return action.addDictData(encodeURIComponent(this.name), applicationId, p, value, successCallback, failureCallback, false, false);
  5854. }
  5855. };
  5856. this["delete"] = function(path, success, failure){
  5857. var p = encodePath( path );
  5858. //var p = path.replace(/\./g, "/");
  5859. var successCallback = function(json){
  5860. MWF.xScript.deleteDictToCache(key, path);
  5861. if (success) return success(json.data);
  5862. };
  5863. var failureCallback = function(xhr, text, error){
  5864. if (failure) return failure(xhr, text, error);
  5865. };
  5866. if( type === "service" ) {
  5867. return action.deleteDictData(encodeURIComponent(this.name), p, successCallback, failureCallback, false, false);
  5868. }else{
  5869. return action.deleteDictData(encodeURIComponent(this.name), applicationId, p, successCallback, failureCallback, false, false);
  5870. }
  5871. };
  5872. this.destory = this["delete"];
  5873. }
  5874. };
  5875. }