SAP Business One

今天我们不说技术也不说设计,我们闲聊一下SAP B1,其实对于我这样一个门外汉来说,B1我是完全不懂的,但最近由于工作上的需要,也出于自己的一些兴趣,硬着头皮看了一些有关的B1的文档,总结出以下几点:

B1 SDK

B1的随行安装包中提供有能够进行二次开发的SDK工具包,提供的API主要分布在两个Namespace,分别为SAPbouiCOM和SAPbobsCOM,它们提供的功能分别是:

  1. SAPbouiCOM用来操作B1 Client UI,也就是我们平常所说的UI API,通过该命名空间下的API接口能够做什么呢?
    1. 粗略看来,在该命名空间下提供了丰富的interop接口,日常工作状态下,人类用鼠标可以操作的,似乎在该命名空间下都有相应的接口,比如打开一个PO,删除一行line,修改某个Comments等
    2. 此外除了可以操纵B1 Client以外,在该命名空间下,还内建了一些B1标准UI Controls,它们可以用来创建与B1 Client风格一致的UI界面
  2. 那么SAPbobsCOM,也即DI API,它又是用来干什么的呢?
    1. 我们知道任何UI的操作,最终是去操作data,无论是direct还是rpc,DI API封装了能够支撑B1 Client运行的所有业务逻辑,实际上,我们通过UI API去操作B1 Client,在其背后便是UI API去调用DI API来执行。
    2. 这便给了我们足够的能力,通过DI API来构建不同的服务或应用程序,比如在B1安装包中所附带的B1 Integration Framework,它对于B1的支持便是利用DI API来实现。

演示

下面通过一个简单的例子,来加深大家对于B1 SDK的理解。它使用了UI API来创建与B1 Client风格一致的用户界面,如果想自由定制,可以阅读我的另一篇文章(B1i Daily Issue Resolver它通过DI API创建了一个与B1 Client有相似功能的登陆界面),似乎如果你有足够的耐心,你能够通过DI API构建另一个B1

  1. 添加一个新的子菜单FormX到MRP菜单中
  2. 点击Foo Button,弹出消息对话框
  3. 将自定义的数据集显示在内建的Grid控件中
  4. 将B1的数据显示在内建的Matrix控件中(注意这里查询出的数据结果是由B1 API来实现,而并非直接通过SQL,即是说API提供了一定的条件筛选和查询能力,自然如果产生无法满足需求的状况,它也提供了备选策略:直接操作SQL的能力)
  5. 点击每行前的箭头,打开相应的Order

新手PM会遇到的五个疑问

文章主要针对新手PM在参加PM培训之后遇到的一些疑问,包括项目失控、PM如何建立威信、团队问题、跨团队合作、PM要不要对技术方案负责等疑问进行一一解答,希望对新手PM和准备踏进PM界的朋友有所帮助。

只有不断的学习,才能不断的进步!

一. 项目失控怎么办?

产生这种情况说明项目管理已经存在大的问题了。要做到的是提前预知,避免这种情况的出现。

万一出现了,首先要深入了解原因。多问自己问题,是人的原因吗?因为开发是新人?负面情绪引发懈怠?还是沟通不畅? 再看如何解决。

1.项目内搞定:

项目内可以搞定吗?回答这个问题的关键是找关键路径。看从非关键路径是否可以抽调资源到关键路径上。这是要注意关键路径的变化。如果没法解决,项目外解决。

2.项目外搞定:

项目外也就是看项目管理三角形,在资源、时间、范围上找解决方法。

二. PM如何建立威信?

其实PM需要建立的不是威信,而是信任。这里提到一个非常有趣的概念,Johari Windows。乔哈里之窗能够用来展现、提高个人与组织的自我意识,也可以用来改变整个组织的动态信息沟通系统。

乔哈里之窗把人的内心世界比作一个四格的窗口:

The Open Arena:开放区,自己和他人都知道的领域。

The Hidden Facade:隐藏区,自己知道别人不知道的领域。

The Blind Spot:盲区,别人知道但自己不知道的领域。

The Closed Area:封闭区,双方都不了解的领域。

真正有效的沟通,只能在公开区内进行。因为在此区域内,双方交流的主题是共知的,沟通效果是会令双方满意的。实际沟通中,很多情况下信息不对等,处于封闭区,导致沟通无效。要使得沟通更有效,需要增强信息的真实度、透明度,进而扩大开放区。扩大开放区的方式可以经由自我坦诚,或经由反馈。

三. 遇到能力强但固执的项目成员怎么办?

1. 识别出其固执的原因。

2. 和其身边的朋友多沟通,对其个性和行事风格等更多了解。

3. 使其承担责任,成为某个课题的owner,自我价值实现。

4. 多搞团建,和团队融合。

5. 不能被团队认可,请出项目组。

四. 跨团队的资源如何协调?

1. 要清楚的认识到,我们不是去要资源,而是要取得一致目标。是我们大家一起要把这个事情做出来。讲讲清楚要做什么,得到认可,把事情变成大家的事情,而不是变成对立。

2. 要有结果,要及时反馈。

五. PM要对技术方案负责吗?

PM对技术方案影响越少越好,要认清PM的职责,是带领团队在竞争中取胜。要识别出可以对技术方案或业务拍板的关键人物,他们去负责。

这里又涉及到PM正确的心态应该是怎样的:

一、善假于力,融会贯通。对人,要知人善任,了解团队,了解成员的长处短处。对事,项目管理各个环节都要融汇进去。

二、正向关注,助人自助。对人,给人机会,也要慎重淘汰。对事,接受挑战,积极正向。

马化腾:腾讯14年,制胜的7个维度

编者按:腾讯公司首席执行官马化腾近日在《牛津管理评论》分享了他一直以来的思考。这些思考来自腾讯14年来的经验和教训。马化腾说,在腾讯内部的产品开发和运营过程中,有一个词一直被反复提及,那就是”灰度”。他很尊敬的企业家前辈任正非也曾经从这个角度有深入思考,并且写过《管理的灰度》,这里所提倡的灰度,主要是内部管理上的妥协和宽容。
以下为马化腾分享的全文:
从去年合作伙伴大会到现在,已经过去了一年。这一年里,我们大家一起向一个开放的、没有疆界的互联网新生态迈出了第一步。大量的创业伙伴在腾讯开放平台上涌现出来,其中不少团队还取得了初步成功。 Continue reading “马化腾:腾讯14年,制胜的7个维度”

需求是如何变成产品原型的-产品经理与交互设计师的对话

在一个互联网公司的工作流程中,产品经理(主要指偏向产品设计的产品人员)和交互设计师是这个流水线上最起点的环节,也是关系最暧昧的两个环节。说其暧昧,是因为在很多互联网公司里面,这两个环节所做的事情是有重合的,这就意味着,他们或许也是整个流程中合作最紧密的两个环节。

相对比之下,产品经理更关注的是产品的内部逻辑、操作流程、策略等;而交互设计师更关注的是产品的易用性、流畅度和操作感受。总的来看,似乎可以认为,产品经理是从一个更加宏观的角度去设计产品,而交互设计师,则是从更多的细节出发,去提升用户体验。这两种不同的视角决定了只有产品经理和交互设计师 密切配合,深入沟通,才能够最高效最合理的将产品策略转化为产品原型,从而为流水线的后面环节提供精确的参考资料。

下面以人人网广告平台的一些产品和交互细节为例,使用对话的形式来分享一下我个人在做交互设计过程中的一些体会和想法。入门级文章,高手请绕行。

在广告平台其中一个投放系统中,有一个产品需求,是要根据广告受众所在的地区做广告的定向投放。也就是说,可以控制广告只展示给固定地域的受众。这就意味着,需要设计一个「区域选择器」,供用户选择区域。产品经理的原始需求是这样的:

产品经理:“我们这次的投放系统需要设计一个区域选择器,就是让用户选择广告定向投放的区域的。可以精确到城市,可以多选。另外,‘区域’作为一个投放广告的限制条件,如果用户没有选择任何选项,那就代表用户忽略该条件,则该广告会面向全国投放。”

交互设计师:“哦。”

产品经理:“嗯,我能够想到的这个东西的原型,可以提供两个下拉框,让用户分别选择省和城市。当用户在第一个下拉框里面选定了省以后,第二个下拉框中会显示该省下面的地级市。我做了一个简单的框图,大家看一下。”

 

产品经理:“大概就是这个样子。每选定一个城市,点击后面的添加按钮,可以将该城市添加到下面的列表中。同时,如果点击已经添加的城市名称后面的「删除」链接,则会将该城市从已选列表抹去。”

交互设计师:“等一下,我有一个问题。按照产品的策略,如果用户一个城市都不选,那么就会默认投放全国。但是这个概念很难表达给用户,比如说,如果在「区域选择器」旁边放提示,估计没有多少人会注意到。”

产品经理:“一个都没选,就是等于忽略条件啊。因为这些都是限制条件。”

交互设计师:“问题是用户很难意识到是这样。在中国人的观念中,大家都是觉得,选上的,是我要的。但是大家没有「不选就等于全要」这种思维习惯。”

交互设计师:“我觉得可以这样。我们在现在的「区域选择器」上面放两个单选按钮。一 个叫「全国」,另一个叫做「指定」。打开页面时,默认选中「全国」项,并隐藏「区域选择器」。只有用户选择「指定」项时,区域选择器才会出现。这样表达就 很明确了,你不是「全国」就是「指定」。”

产品经理:“哦~听起来不错。试试。”

于是得到了下面这个版本的原型图:

 

交互设计师:“嗯,我想,现在这个版本已经基本上从界面的层面解决了全国投放的选项问题,我想,用户应该不会因为不知道怎么选而卡在这里了。”

交互设计师:“我看下一步,需要对一些关键的元素做一定的视觉设计,以便于引导用户操作。比如「添加」按钮,应该更明显些。我觉得可以请UI设计师出一个简单版本的UI了。”

产品经理:“稍等一下,我看咱们还是把细节再讨论清楚一些再去找UI吧。比如,字的颜色啊什么的都没定呢。而且,我觉得选中的区域中,每个城市名称后面都跟着一个删除链接,很奇怪。”

交互设计师:“嗯。的确。我的想法是这样,字的颜色,就用黑色吧,或者是深一些的灰 色也行。虽然从视觉设计的角度来看,视觉设计师觉得稍浅一些的灰色比较养眼,可能黑色太‘抢’。但是咱们的系统毕竟是给人用的,灰色的话,可能会让人误认 为这些选项是不可操作的。你看如何?”

产品经理:“同意。”

交互设计师:“关于已经选中的区域列表。我看可以把「删除」链接换成×,事实上,用户对于×这种符号比汉字更敏感。你看,大家不论是用Windows还是 Mac,关闭窗口的时候都是×,早就习惯了。另外,为了让所选定的城市名称看起来是一个整体,并且跟其他城市名称区分开。我看,可以给每一个城市加上背景 色,每个城市一个色块,这样也一目了然。”

产品经理:“颜色呢?”

交互设计师:“蓝色吧,人人网都是蓝色的风格。”

产品经理:“ok”

于是,配合UI设计师,得到了下面的界面:

 

产品经理:“我看现在这个地方已经基本上成型了。咱们也已经讨论很很久了。该问问别人的意见。”

———-时间分割线———-

产品经理:“Hi~ 各位。我收集了一些内部测试的意见。有用户提出,搞不太清楚两个下拉菜单和「添加」按钮之间的关系。”

交互设计师:“什么意思?”

产品经理:“就是说,有人意识不到选完了省,选完了城市以后,还得点「添加」。他们觉得,选完了就完事了。”

交互设计师:“晕。”

交互设计师:“可能是已选列表框在空着的时候长得太秀气了,大家没意识到它是用来装东西的。”

交互设计师:“好吧,我有两个方案。1、把「添加」按钮上面加一个向下的箭头。指向已选列表框。2、在已选列表空着的时候,添加一条提示语,来提示用户他并没有完成区域选择操作。”

产品经理:“提示语那个,你的意思是说,当用户添加了城市以后,会自动消失是吧?”

交互设计师:“是的。”

产品经理:“我觉得加提示吧。感觉放箭头有点儿傻。”

交互设计师:“嗯,而且,可能放了箭头以后,用户依然不知所云。”

产品经理:“那提示语怎么说呢?您尚未添加任何区域,请选定城市后,点击上面的「添加」按钮,该城市会被添加到…”

交互设计师:“停!太长了,大部分人不会认真看完的。”

产品经理:“的确…”

交互设计师:“我看就一句话就可以。写‘您尚未添加任何区域。’”

交互设计师:“你看。下拉列表后面的按钮叫「添加」。提示中又明确的传达出了尚未「添加」的状态。这样既说明了这个框框是用来放东西的,又可以告诉用户,这个东西是可以选多个的。因为「添加」的概念就是一个一个往里面放。如果只能放一个,那应该叫「选择」。”

产品经理:“顶。”

交互设计师:“而且,我觉得这个控件最初的原型你设计的不错。嗯,用户只要成功的进行一次操作,以后就可以非常高效的进行操作了。这个东西的学习成本和认知成本都比较低。”

产品经理:“oh,yeah~”

那么,现在的UI是这样的:

 

产品经理:“哎,对了。话说,我最开始的策略是,用户如果不选,相当于全选,要全国投放的。你说如果用户选了「指定」,但是并没有添加具体的城市,直接提交表单,怎么办?系统是应该直接把用户的广告设置成全国投放,还是报错,阻止用户继续?”

交互设计师:“我看啊,报错吧。因为现在「全国」和「指定」这两项,已经明确的把整 体和局部给分开了。我觉得你那个策略没必要再应用了,因为现在这种已经达到了你最初的目的,而且还好理解。再有就是,咱们的平台是涉及到钱的,是要让用户 花钱的,如果让用户不明不白花了冤枉钱,本来想投北京的投了全国,那我们会被用户骂死的。虽然感觉上报错会让用户有挫败感,但是在这种细节上,还是用户利 益应该放在第一位,用户体验,可以稍微往后放一放了。”

产品经理:“好吧。”

交互设计师:“呵呵,你看,这个故事告诉我们,不能每件事情都听产品的。产品提的只是需求,但是如何实现需求,还是得从多个角度来讨论。”

产品经理:“好吧。那么,技术兄弟们,下面的工作就拜托你们了。”

个人观点:

1、产品经理和交互设计师需要时刻密切配合,深入沟通。

2、有时候,产品策略和用户体验会发生冲突,这时应该从多种角度去考虑和探讨最终解决方案,不应该有谁一定比谁重要的说法。

3、优秀的产品经理,相当于半个交互。同样,优秀的交互设计师,相当于半个产品。二者虽然职位不同,但是应该在一定程度上考虑对方的工作内容。

4、产品提出的只是策略和需求,并不是一定要按照产品人员所描述的细节去设计具体的产品细节。交互设计师以及团队中其他所有成员,有义务有权利对产品需求提出自己的见解和更好的设计方案。有不同意见可以讨论,但是最终决定权,应该依然属于产品经理。

5、产品经理之所以叫经理,是因为,他们除了设计产品,还需要时刻把握整个流程。比如,当细节没讨论清楚的时候,不要去找UI做设计。

注:本文中对话部分并非真实情节,只是为了说明主题而已。

一个老程序员的建议

本文是《Learn Python The Hard Way, 2nd Edition》这本书的尾声部分。

看完了这本书,你决定继续做编程。也许它能成为你的一个职业,也许它能成为你的一项爱好。但你需要一些指导,确保自己不会走错了道路,或帮助你从这个新业余爱好中得到最大的乐趣。

我做了很久的编程。久的你都想象不出来,久的都让我苦恼。就在我写这本书的时候,我大概懂20种编程语言,而且我可以用一天或长点儿用一周的时间学会一种新语言——要依这种语言有多奇怪而定。但这最终成为了我的苦恼,它们已经不能再吸引我的兴趣。我并不是说这些语言没有意思,或告诉你你会觉得它们很枯燥。只是想说在我的职业旅程走到现在,我已不再对语言有兴趣。

经过这么多年的学习经历,我发现语言本身并不重要,重要的是你如何用它们。事实上,我一直知道这个道理,但我总是被语言吸引走,周期性的忘记这个道理。现在我不再忘记了,你也应该这样。

你会什么语言、你用什么语言,这并不重要。不要被围绕在编程语言周围的各种宗教宣传迷惑,那些只会遮蔽你的眼睛,让你看不出这些语言只是一种让你做有趣的事情的工具而已。这才是它们的真正属性。

编程作为一种智力活动,它是唯一的一种能让你创造出交互式艺术作品的艺术形式。你创造出来人们可以操作的软件,你是在间接的和人们交互。没有任何其它艺术形式有如此的交互性。电影是单向的向观众传输信息。绘画是静态的。而软件程序却是双向动态的。

编程只能算是一项一般有趣的工作。它可以成为一个不错的职业,但如果你既想多挣钱又要干的高兴,不如去开一家快餐馆。如果你把编程当做一种秘密武器在其它行业里使用,也许会有更好的效果。

科技界科技公司里会编程的人多如牛毛,没人会在意他们。而在生物界,医药界,政府,社会学界,物理界,历史界和数学界,如果你有这种技能,你能做出令人瞩目的事情。

当然,所有的这些话都是没有意义的。如果通过这本书,你喜欢上了编程,你应该尽你最大的努力,通过它来改善你的生活。去探索这神奇的精彩的智力活动,也只有近50年来的人有机会从事这种职业。如果你喜欢它,就尽情的热爱它吧。

最后我要说的是,学习开发软件会改变你,让你与众不同。不论是好的不同还是坏的,反正是不同。你会发现,因为你会开发软件,人们会对你很冷淡,会用“书呆子”这样的词形容你。你会发现,由于你善于剖析逻辑,人们痛恨跟你辩论。你甚至会发现,只是简单的懂一些计算机原理都会给你带来很多烦恼,让你跟他们比起来怪怪的。

对于这些问题,我只有一点小建议:让他们去死吧。这世界需要更多的能知道事情如何工作、喜欢去探索的人。当他们这样对待你时,你要记住,这是你的生活,不是他们的。与众不同不是罪恶,人们这样对你只是出于嫉妒,嫉妒你拥有一项他们在梦中都无法拥有的技能。

你会编程。他们不会。这真他妈的酷毙了。

共青团苏州市沧浪区委“会员制”志愿者管理服务系统

这段时间1直在负责公司的1个项目,这也是为什么今天周六大家都没有休息的原因,按照计划25日就要项目结束的了,还有13天。我来简单谈谈这个项目吧,上周这个项目也获得了苏州市经信委市级加快信息化建设专项资金扶持。
项目的主办方是共青团苏州沧浪区委,他们1直在计划这样1个平台:大家可以看到现在每天早晚会有很多挽着“志愿者”标志的广大社会人士在苏州市交通要道指挥交通,这些人叫做志愿者,他们1直有志于回报社会,当然这是非常值得提倡和学习的,目前社会志愿者也日益成为我国现代社会管理的重要力量,团区委希望搭建这样1个平台,在这个平台上广大普通社会人士可以申请注册成为1名志愿者,当他的信息通过审核后,团区委会给他发送1张能够唯一标识他身份的会员卡片,并且他能够登陆这个平台,在平台上获取感兴趣的志愿活动信息,然后申请报名相应志愿活动,1旦活动报名通过,他就能够去现场参加这些志愿活动,比如:去照顾老人、带小孩、指挥交通等等,同时团区委为了发扬和扩大志愿者精神和队伍,也会对志愿者们进行小小的奖励,就是在他每参加完1次志愿活动后,会在平台系统里给他记录1定数量的积分,当志愿者的积分达到1定量的时候,可以去团区委的指定机构兑换1些纪念礼品。
本身这个项目是比较简单的,相对比较复杂的就是:由于志愿者在参加完活动后需要记录积分,那么就需要有联网的设备对会员卡片进行刷卡操作,以将会员卡号、活动编号发送到平台;由于志愿者在积分达到1定程度的时候,可以去指定机构兑换礼品,那么同样需要有联网的设备对会员卡片进行刷卡操作,以将会员卡号、礼品编号发送到平台。
这也是我们目前尚未解决的问题,我们将这个需求扩展以后,形成了以下这样2条需求:“某志愿者通过某终端刷卡机参加了某活动,获得了多少积分;某志愿者通过某终端刷卡机兑换了某礼品,消费了多少积分”。为了实现这2条需求,团委领导、公司老板及我先后接触了多家公司,第1家是建行苏州分行,我们计划使用建行的信用卡或者借记卡来实行会员卡的功能,刷卡终端采用银联POS机或建行其它设备来实现,但后来由于建行信用卡发卡需要较多的用户信息,并且信用卡需要年费,未成立人需要监护人签字等条件,建行借记卡不能零消费,还有小额管理费等条件,我们和建行的洽谈就结束了;第2家我们找的是中国移动苏州分公司,刚开始他们给我们介绍了1款叫做CUPMobile智能SD卡的产品,这款产品是第3方供应商提供的,叫做海瑞斯信息科技,这款产品大小和1般mini sdcard相仿,可以作为普通的sdcard插入手机sdcard插槽中,不同的是该sd卡是智能sd卡,带有可以和终端设备进行交互的芯片,能够进行编程罢了,该方案后来由于必须走银联通道而告终,因为走银联通道意味着每次刷卡银联就要收取手续费,并且银联也不允许零消费操作;第3家还是中移苏分,不过这次他们推荐的是他们自己的产品,1张带有天线的芯片卡,可以放进普通的手机里,如果放不进去的,也可以做成1张普通IC卡片,无奈该方案也不完美,就是该方案终端设备上相配套的终端软件需要独立开发,这是我们目前的方案1。
当前该项目即将要结束,却陷入僵局,没有较完美的终端刷卡方案。期间我也计划了另外1套方案,使用二维码技术,每次志愿者上网报名活动和兑换礼品,我们生成1个唯一的2维码图片给志愿者,他可以选择打印或者保存,我们也可以通过彩信通道将2维码图片发送至他的手机上,志愿者只要活动结束或者礼品兑换现场将2维码图片出示并在电脑或手机前1扫,我们就可以获得该二维码图片所代表的网址信息,我们将网址打开就实现了刷卡,这是我们目前的方案2。
这个项目采用的是PHP,使用的Zend Framework MVC方式,目前90%功能部分和页面已经完成,但是时间相当紧迫,辛苦了这帮弟兄们了。