PDF噩夢
在之前的一段時間里,只要一提起PDF,我就會頭暈,然后是頭疼,最后是頭大,總之是和頭相關(guān)。需求很簡單:為所有報表提供在線生成PDF版本的功能,這樣網(wǎng)站用戶在瀏覽報表時就可以下載離線瀏覽。對不住了,開源軟件,我不得不說,慎用開源軟件,慎用!痛苦的查找論壇、痛苦的翻看源碼,最后,在支付了200歐后,痛苦消失了,我們購買了商業(yè)軟件,200歐兼容了更多的網(wǎng)頁結(jié)構(gòu),200歐具有更快的速度,200歐帶有一年的技術(shù)支持,最最重要的是,200歐,客戶出的。
這不是這里的關(guān)鍵,問題是,200歐后,我遇上了新麻煩:報表的PDF版本樣式不正確,不正確的原因是圖片下方的文字將圖片的排列樣式弄亂了(圖片大小不規(guī)則,字?jǐn)?shù)不規(guī)則)。在網(wǎng)頁中,DOM渲染完畢后,我們使用JavaScript來進(jìn)行圖片與文字高度的重計算,但在PDF中,我們束手無策。
我問BA,可以容忍部分圖片排列不整齊否?不出所料。
懷有僥幸,我繼續(xù)問BA,可以容忍部分文字丟失否?BA說,不可以。意料之中。于是找到徐昊。
徐昊問BA,這些說明文字對客戶如此重要嗎?
BA說,是的。
徐昊說,為什么?它主要有哪些內(nèi)容?
BA說,有標(biāo)題,簡單說明以及圖片的版權(quán)信息,最重要的就是版權(quán)信息,一定不能丟失。
徐昊說,能不能這么說,其實(shí)對客戶最關(guān)心的是版權(quán)信息。
BA說,是的。
于是問題解決。解決方案是:我們給文字定高,同時將文字縮小以容納最可能多的字?jǐn)?shù),這樣網(wǎng)站用戶在PDF里看到的圖片重新恢復(fù)了整齊,盡管看不太清圖片說明文字,但是用戶真正關(guān)心的是圖片,誰關(guān)心哪些無處不在的版權(quán)信息呢?你可能會說了,看不清版權(quán)信息怎么行?幸好,你問的不是,版權(quán)信息有那么重要嗎。回答是,這里是PDF,移動你的鼠標(biāo)到Zoom,點(diǎn)擊下拉框,點(diǎn)擊150%以上的選項(xiàng),然后,你會驚訝的發(fā)現(xiàn),那些該死的版權(quán)信息到處都是。
BA的職責(zé)是幫客戶發(fā)現(xiàn)的問題,開發(fā)人員的職責(zé)是解決問題,QA的職責(zé)是校驗(yàn)最終的實(shí)現(xiàn)是否能夠解決客戶的問題。具體到一個用戶故事上,就是BA編寫用戶故事,DEV編碼開發(fā),QA驗(yàn)收用戶故事,這是三個任務(wù),很明顯,這三個任務(wù)有一個非常重要的共享信息,這個信息就是用戶故事所要實(shí)現(xiàn)的客戶價值(即幫客戶解決的問題)。圍繞著客戶價值,每次迭代開始前,團(tuán)隊(duì)都會進(jìn)行迭代計劃會議,所有成員會跟隨BA逐一審核各個用戶故事;圍繞著客戶價值,開發(fā)人員開發(fā)中隨時可以和BA進(jìn)行溝通,就設(shè)計問題進(jìn)行討論;圍繞著客戶價值,開發(fā)人員每開發(fā)完成一個故事,BA、開發(fā)人員和QA就會在一起進(jìn)行一個微型 ShowCase,在期間討論用戶故事的實(shí)現(xiàn)是否實(shí)現(xiàn)了客戶價值,大家對用戶故事的理解是否一致。
那么,在相關(guān)的任務(wù)之間需要能夠定義變量,這些變量數(shù)據(jù)能夠在這些任務(wù)間共享。
描述
一定的任務(wù)范圍能夠定義變量,在一個流程實(shí)例里,該范圍所包含的任務(wù)實(shí)例能夠使用該變量。
圖 6-4任務(wù)范圍級別的數(shù)據(jù)可見性
如圖6-4所示,我們劃定了一個任務(wù)范圍,該范圍包含了任務(wù)A、任務(wù)B和任務(wù)C,同時,我們在該任務(wù)范圍內(nèi)定義了一個變量M,那么,在一個流程實(shí)例里,只有任務(wù)A、B和C的實(shí)例在運(yùn)行期能夠使用該變量,任務(wù)D和E的實(shí)例都不能訪問,不可見。
可以看到任務(wù)范圍和塊任務(wù)在概念上比較相似,都是包含一系列的子任務(wù),它們之間的差別在于:塊任務(wù)一般具有比較獨(dú)立的執(zhí)行上下文和業(yè)務(wù)語義,而任務(wù)范圍則是對具有相同執(zhí)行上下文的任務(wù)的一種分組。
在工作流系統(tǒng)里,對流程任務(wù)進(jìn)行分組的好處在于:可以為特定的一組任務(wù)綁定數(shù)變量、異常處理器和補(bǔ)償動作。例如在圖6-4中,如果任務(wù)A、B和C中的任一實(shí)例執(zhí)行失敗,那么我們就認(rèn)為整個任務(wù)區(qū)域執(zhí)行失敗,將統(tǒng)一執(zhí)行一個業(yè)務(wù)補(bǔ)償行為,同時,這些任務(wù)共享一個異常處理器。
實(shí)現(xiàn)
在jBPM4里,流程定義模型相比jBPM3最大的變化即是引入了任務(wù)嵌套的概念,一個任務(wù)能夠包含多個其他任務(wù),這里的父任務(wù)即可充當(dāng)任務(wù)范圍的定義。jBPM4針對這種嵌套的任務(wù)建立了一套處理機(jī)制,總的來說就是建立任務(wù)運(yùn)行期的嵌套關(guān)系,查找變量時首先會在任務(wù)級別進(jìn)行查找,如果找不到,則會依次向上查找父任務(wù)實(shí)例,直至流程實(shí)例級別變量,同時,父任務(wù)可以統(tǒng)一綁定異常處理器和事件動作。在后續(xù)jBPM4的章節(jié),我們將會詳細(xì)分析該機(jī)制的實(shí)現(xiàn)細(xì)節(jié)。
http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)
posted on 2010-03-22 22:26
ronghao 閱讀(1623)
評論(0) 編輯 收藏 所屬分類:
Head First Process-深入淺出流程