您的位置:首页 > 其它

自定义datastage阶段

2015-12-08 22:01 316 查看
新建两个表定义,用于阶段的输入(InTableDef)输出(OutTableDef)。



(1).InTableDef的定义如下(输入字段为:inID):





(2).OutTableDef的定义如下(输出字段为vaild):





创建一个新的buildstage



编辑阶段常规属性(命名阶段的名称为ID_VER):



编辑阶段构建->接口->输入属性(表名为:选择我们刚刚新建的表定义)



编辑阶段构建->接口->输出属性(表名为:选择我们刚刚新建的表定义)



编辑阶段构建->接口->传输属性



编辑阶段构建->逻辑->定义属性(也可以在 每条记录 里面直接定义)



编辑阶段构建->逻辑->每条记录属性(在这里编写功能代码,这里是身份证有效性的验证代码,来源IBM官网)



源代码:来源IBM官网
APT_StringaddressNumber[] ={"11","22","35","44","53","12","23","36","45","54","13","31","37","46","61","14","32","41","50","62","15","33","42","51","63","21","34","43","52","64","65","71","81","82","91"};
intiWeight[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
staticchar sVerCode[]="10X98765432";
boolbResult;
bResult=true;
boolb_IsLeapYear=false;
int Days[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inti,length;
intiYear;
intiMonth;
intiDay;
APT_StringID;
APT_StringIdtemp;
intiS = 0;
intiY;
ID= InRec.inID;

ID.trimWhitespace();
length= ID.length();
//lengthverify
if(length!= 15 && length != 18)
{
bResult= false;
}
else
{
//provinceverify
for(i = 0; i<= 34; i++)
{
if(ID.substring(0,2) == addressNumber[i])
break;
elseif (i == 34)
{
bResult= false;
}
}
if(bResult)
{
//Year,Month,Dayverify
intiYear = atoi(ID.substring(6, 4).data());
intiMonth = atoi(ID.substring(10, 2).data());
intiDay = atoi(ID.substring(12, 2).data());
if(iMonth<1|| iMonth>12)
{
bResult= false;
}
else
{
if(iYear%4== 0)
{
b_IsLeapYear= true;
if(!(iYear%100==0 && iYear%400==0)) b_IsLeapYear=false;
}
if(b_IsLeapYear)
Days[1]=29;
else
Days[1]=28;
if(iDay<0 || iDay>Days[iMonth-1])
{
bResult= false;
}
else
{
//verifycheck code
if(ID.length()!= 17)
{
for(i=0;i<17;i++)
{
iS+= (int)(ID[i]-'0') * iWeight[i];
}
intiY = iS%11;
if(sVerCode[iY]!= ID[17])
{
bResult = false;
}
}
}
}
}
}
if(bResult)
vaild= "TRUE";
else
vaild= "FALSE";

编写完成后,点击下方的生成后,会弹出日志反馈是否成功,不成功继续调试。

实例验证stage的正确性:



输出结果:

源表:511**为正确的身份证



2.文件,记录了错误的身份证号的那条记录



目标表,结果是和源表一样的:



注意事项:1.自定义的stageID_VER的输入为inID,所以DSLink1的输出字段必须定义为inID
2.filter的属性编辑:



3.OutputLink的确定是在“链接排序”里边。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: