Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当联系人未被覆盖时需要SOContact字段

当联系人未被覆盖时需要SOContact字段
EN

Stack Overflow用户
提问于 2021-10-26 10:06:01
回答 2查看 70关注 0票数 0

在销售订单屏幕金融设置选项卡,我需要使法案-联系电子邮件领域需要。无论是否检查“覆盖联系人”,都需要使用电子邮件字段。

通常,只需设置PXDefault("", PersistingCheck = PXPersistingCheck.NullOrBlank)就可以生成所需的字段。但是,只有在选中“覆盖联系人”时,此操作才有效。

如果联系人没有被覆盖,那么电子邮件字段就会被禁用,并且它忽略了持久化检查而不需要电子邮件字段。

如何才能要求电子邮件字段,即使账单联系人未被覆盖?

这是我现在的密码。同样,如果该联系人被重写,但当该联系人未被覆盖时没有任何效果,则此操作仍然有效。

代码语言:javascript
运行
AI代码解释
复制
 public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry.CarrierRates, SOOrderEntry>
    {
        // Make Financial Settings Email required
        [PXMergeAttributes(Method = MergeMethod.Append)]
        [PXDefault("", PersistingCheck = PXPersistingCheck.NullOrBlank)]
        public void SOBillingContact_Email_CacheAttached(PXCache sender) { }
    }

另一种方法

我还尝试使用事件处理程序来引发异常。这种方法也是行不通的。

代码语言:javascript
运行
AI代码解释
复制
public virtual void SOBillingContact_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e)
{
    SOBillingContact contact = (SOBillingContact)e.Row;
    if (contact != null)
    {
        if (String.IsNullOrEmpty(contact.Email))
        {
            cache.RaiseExceptionHandling<SOBillingContact.email>(e.Row, ((SOBillingContact)e.Row).Email, 
                new PXSetPropertyException("Email is required", PXErrorLevel.Error));
        }
    }
}

此代码正在运行,但异常似乎会被抑制,并且永远不会显示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-28 12:26:35

我找到了一个解决办法:

首先,我使用Automation在屏幕上创建了所需的SOBillingContact.Email字段

但是,正如在最初的问题中所解释的,只有当账单联系人被覆盖时,这才是有效的。

为了在未覆盖计费联系人(即覆盖contact = False)时获得所需字段,我为SOOrder_RowPersisting添加了一个事件处理程序。在事件处理程序中,我将抛出一行持久化异常,并在记帐联系人电子邮件字段中引发异常处理。

抛出行持久化异常会阻止保存记录(这正是我想要的),并显示一个错误,但它也保留缓存中的更改,以便用户能够更正错误并再次保存,而不会丢失更改。引发字段异常会将异常附加到字段本身,这样用户就可以清楚地知道他们需要修复什么。如果只是引发字段异常而不引发行持久化异常,则后续事件会抑制该异常,而不会显示该异常。

代码语言:javascript
运行
AI代码解释
复制
public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
    protected virtual void SOOrder_RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
    {
        SOOrder order = (SOOrder)e.Row;
        if (order == null) { return; }

        if (e.Operation == PXDBOperation.Insert || e.Operation == PXDBOperation.Update)
        {
            SOBillingContact billingContact = PXSelect<SOBillingContact,
                    Where<SOBillingContact.contactID, Equal<Required<SOOrder.billContactID>>>>.Select(Base, order.BillContactID);
            PXCache billingContactCache = this.Base.Caches[typeof(SOBillingContact)];

            if (billingContact.Email == null || billingContact.Email == "")
            {
                billingContactCache.RaiseExceptionHandling<SOBillingContact.email>(billingContact, billingContactCache.GetValueExt<SOBillingContact.email>(billingContact),
                  new PXSetPropertyException("Financial Email is required", PXErrorLevel.RowError));

                throw new PXRowPersistingException(typeof(SOBillingContact.email).Name, null, "Financial email is required");
            }
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-10-26 12:31:31

你试过PXUIRequiredAttribute了吗?它允许您有条件地确定何时需要字段。否则,移除PersistingCheck或向PXUIField属性添加Required = true。

PXUIRequiredAttribute的例子:

代码语言:javascript
运行
AI代码解释
复制
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault]
[PXUIRequired(typeof(Where<Current<SOBillingContact.overrideContact>, Equal<True>>))]
public void SOBillingContact_Email_CacheAttached(PXCache sender) { }

在您的应用程序中没有经过测试,但这遵循了我在代码中使用的格式。

此外,如果需要,请记住打开字段以启用条目,这样就不会导致验证以防止保存用户无法正确保存的记录。通过自动化步骤或UI工作流,或者在RowSelected事件中,都可能需要“解锁字段”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69727960

复制
相关文章
python使用moviepy模块对视频进行操作
前段时间需要对多个视频进行合并,还需要对一个视频按需求进行截切成多个视频,然而网上虽然有现成的工具。
狼啸风云
2020/01/14
1.6K0
Python视频编辑库:MoviePy
MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果。可以看gallery中的一些实例来了解用法。MoviePy可以读写所有的音频和视频格式,包括GIF,通过python2.7+和python3可以跨平台运行于window/Mac/Linux,下面是一个在IPython notebook的运行实例。 demo_preview.jpeg 实例
py3study
2020/01/02
2.2K0
Python使用tkinter+moviepy+pyaudio开发视频播放器
使用tkinter制作界面,播放mp4、avi视频,需要安装扩展库moviepy和pyaudio,可以参考之前推送过的文章或查阅相关资料。
Python小屋屋主
2020/05/08
1.7K0
Python使用tkinter+moviepy+pyaudio开发视频播放器
Python视频剪辑工具moviePy
关注了很多的公众号,大佬们的骚操作层出不穷,看的我跃跃欲试。也想整一下。跟在大佬们的后面好看风景(复现操作)。
云深无际
2021/04/14
2K0
Python视频剪辑工具moviePy
使用Python+moviepy连接不同尺寸的视频文件
如果直接连接多段不同尺寸的视频文件,后面几段可能会出现花屏的现象。可以使用VideoFileClip对象的resize()方法调整至相同大小,然后再进行连接就可以了。ImageFileClip对象也具有同样的resize()方法。
Python小屋屋主
2020/02/13
3.8K0
使用Python+moviepy连接不同尺寸的视频文件
创建和发布 Python 包
如果你和我一样,希望将编写的 Python 实用程序与同事共享,最好的方法是制作一个软件包:它很容易安装,而且不需要复制粘贴。
老齐
2021/04/30
9790
创建和发布 Python 包
如何发布自己的 python 包?
本文以笔者实际发布的 python 包 imgkernel 为例。因此,在本文所有出现 imgkernel 的地方,都替换成读者自己项目或包的名称。 同时,imgkernel 也托管在 github 上,后续 master 分支会更新,但是项目单独检出的 pkg 分支将保持与本文内容一致,不再改动。因此,可以将此分支 clone 下来作为新项目启动工程。clone pkg 分支的方法如下:
我是一条小青蛇
2019/10/23
6260
如何发布自己的 python 包?
moviepy,短视频生成
moviepy是一个用于视频编辑的python模块,能够实现基本的操作,比如视频的裁剪,拼接,插入标题等等 甚至还自带了一些高级的特效,以后再说。当然,gif格式的读写也在其内。
福贵
2021/01/08
1.7K0
保姆教程:构建与发布Python包
通常,如果您正在创建 Python 包,要么是因为有一些想要与他人分享的代码,要么是因为您对想要分享的东西有一定的想法。
数据科学工厂
2023/02/27
1.4K0
保姆教程:构建与发布Python包
使用dotnet Cli向nuget发布包
长话短说, 今天分享如何在nuget.org创建并发布.NET Standard package。
有态度的马甲
2020/06/10
1.2K0
python:使用moviepy合并m3u8格式的视频
视频网站或者客户端缓存下来的文件很多时候都是m3u8格式的文件,也就是拆成了很多段的视频,一个m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist)或者是一个主列表(Master Playlist)。
生信菜鸟团
2022/04/08
1.9K0
python:使用moviepy合并m3u8格式的视频
python也能玩视频剪辑!moviepy操作记录总结
前几篇文章咱们介绍了一下图片的处理方式,今天咱们说说视频的处理。python能够支持视频的处理么?当然是肯定的,人生苦读,我用python。万物皆可python。
菜鸟小白的学习分享
2020/07/14
1.3K0
Python包:json扩展包demjson使用
Json在编程中是一种轻量级的文件格式,在本地开发或者web开发中使用较多。参考维基百科介绍如下:
用户3578099
2020/09/22
2.9K0
Python+moviepy进行音频剪辑、拼接和格式转换
1、使用pip命令安装Python扩展库moviepy。 2、查看音频原文件的属性,尤其是比特率,下图所示是一个用手机录制的音频文件的信息 3、编写代码,截取上面音频文件中的几段,然后拼接到一起。 4
Python小屋屋主
2021/07/19
2K0
使用typescript开发angular模块(发布npm包)
创建模块 初始化package.json文件 执行命名 npm init -y 会自动生成package.json文件如下,name默认为文件夹名称 { "name": "MZC-Ng-Api", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords"
易兒善
2018/08/21
1.3K0
使用typescript开发angular模块(发布npm包)
python学习笔记5.4-包的发布
本文介绍了如何利用Python包的发布工具发布自己的Python包。主要包括了setup.py和MANIFEST.ni文件的介绍和编写,以及包安装的过程。
锦小年
2018/01/02
5730
如何使用npm发布自己的npm包
一. 创建 在npm的官网上注册一个账号,https://www.npmjs.com/ 1:在本地通过npm init 初始化一个项目,并建一个index.js 文件,因为index.js为默认进入的文件,如下: image-ab2ede5fb9d14ab8bb059eb63257c67c.png 2:在本地将该创建的项目打开,并在index.js编写想要写的文件(这里简单写一个排序),如下: image-1dc4644452b844869943897ce6cfd223.png 3:接下来通过npm
小吕
2022/06/16
1.5K0
如何使用npm发布自己的npm包
如何使用npm发布自己的npm包
一. 创建 在npm的官网上注册一个账号,https://www.npmjs.com/ 1:在本地通过npm init 初始化一个项目,并建一个index.js 文件,因为index.js为默认进入的文件,如下: 2:在本地将该创建的项目打开,并在index.js编写想要写的文件(这里简单写一个排序),如下: 3:接下来通过npm login来登录你之前创建的npm账号,如下: 4:npm pubish 二. 使用 npm install 包名 三. 版本更新 更改版本号 重新发布
小吕
2022/09/26
3.8K0
如何使用npm发布自己的npm包
提取视频中的音频——python三行程序搞定「建议收藏」
  身处数据爆炸增长的时代,各种各样的数据都飞速增长,视频数据也不例外。我们可以使用 python 来提取视频中的音频,而这仅仅需要安装一个体量很小的python包,然后执行三行程序!   语音数据在数据分析领域极为重要。比如可以分析语义、口音、根据人的情绪等等。可以应用于偏好分析、谎话检测等等。
全栈程序员站长
2022/08/26
1.5K0
提取视频中的音频——python三行程序搞定「建议收藏」
点击加载更多

相似问题

DBIx::Class和DBIx::Abstract?

19

Catalyst中的DBIx::Class升级(DBIx::Class::Schema::Loader)

11

如何修改DBIx::Class::Row?

23

DBIx::Class::ResultSet问题

10

DBIx::Class临时列

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文