cancel
Showing results for 
Search instead for 
Did you mean: 

Cannot locate UDF

Former Member
0 Kudos

I have 2 previously created UDFs in OIPF Table. However I cannot seem to be able to locate them in UDF management window. Any help as to where should I look at to narrow my search?

thanks in advance.

Accepted Solutions (0)

Answers (4)

Answers (4)

kothandaraman_nagarajan
Active Contributor
0 Kudos

Hi,

Please avoid posting multiple thread for same discussion.

http://scn.sap.com/thread/3373295

Thanks & Regards,

Nagarajan

Former Member
0 Kudos

Sorry about that. I saw no activity under my account since I entered this question the previous time I believed some type of malfunction had occured. So, I reposted the question and then, both of them came up! won't happen again.

kothandaraman_nagarajan
Active Contributor
0 Kudos

Hi Alex,

No problem. Some time it will happen like that and this is not your mistake.

Just highlighted for you.

Thanks & Regards,

Nagarajan

kothandaraman_nagarajan
Active Contributor
0 Kudos

Hi Alex Siokas,

Please run below query to check whether created UDF is appeared in query result or not.

SELECT * FROM OIPF T0

Thanks & Regards,

Nagarajan

Former Member
0 Kudos

Yes have already checked and it does appear amongst the table columns. It also appears in SAP B1 itself. It just cannot be found under Management -> Marketing documens Head (OR Rows...).

KennedyT21
Active Contributor
0 Kudos

Hi Alex...

It should under the marketing documents rows ...

Regards

Kennedy

Former Member
0 Kudos

It appears under none actually, thats why I was buffled in the 1st place. However I found out it could be otherwise installed so that it wont appear in the Management window.

Former Member
0 Kudos

Alex,

Pleases check..

Description of the bug:

User-Defined Table (UDT) and User-Defined Field (UDF) related issues often have different behaviors. This note provides a few generic queries to detect some common issues about UDT & UDF. If an issue is related to UDT & UDF, the queries provided bellow will detect the inconsistencies known.
1) UDT is defined but does not exist.
2) UDF is defined on a non-existing table.
3) UDF is defined on an unregistered UDT.
4) UDF is defined but does not exist.
5) UDF valid values are defined for a non-existing UDF.
6) UDF definition does not match actuality.
7) UDF contains extra spaces in field TableID or AliasID in CUFD table.
😎 UDF exists but is not defined

/*1) UDT is defined but does not exist.*/

select TableName from OUTB
where not exists (
select 1 from sysobjects where xtype='U' and name='@'+TableName
)

/*2) UDF is not registered.*/

select * from sysobjects where [name] like '@%' and name not in
(select '@'+tablename from outb
union all
select '@'+logtable from outb where logtable is not null) and xtype='U'

/*3) UDF is defined on an unregistered UDT.*/

select T0.TableID from CUFD T0 where left(T0.TableID,1)='@' and
not exists (select 1 from OUTB T1 where '@' +T1.TableName =
T0.TableID or '@'+T1.LogTable= T0.TableID)

/*4) UDF is defined but does not exist.*/

select TableID, AliasID from CUFD where not exists (
select t0.name, t1.name
from sysobjects t0 inner join syscolumns t1
on t0.xtype='U' and t0.id=t1.id
where t0.name=TableID and t1.name='U_'+AliasID)
and TableID not in ('BTNT', 'OIBT', 'OSRI', 'SRNT')

/*5) UDF valid values are defined for non-existing UDF.*/

select TableId, FieldID from UFD1 T
where not exists (
select 1 from CUFD where TableId=T.TableId and FieldID=T.FieldID
)

/*6) UDF definition does not match actuality.*/

select T1.UDF, T0.nvarchar_size as 'act_size', T1.nvarchar_size as 'def_size' from (
select T2.name + '.' + T3.name as 'UDF', T3.length/2 as 'nvarchar_size' from sysobjects T2 inner join syscolumns T3 on T2.id=T3.id where T2.xtype='U' and T3.xtype in
(select xtype from systypes where name='nvarchar')
) T0
inner join (
select tableid + '.U_' + aliasid as 'UDF', editsize as 'nvarchar_size'
from cufd where typeid='A' and editsize>1
) T1
on T0.UDF=T1.UDF
where T0.nvarchar_size>T1.nvarchar_size

/*7a) UDF contains extra spaces in field TableID in User-fields description CUFD table.*/

select * from CUFD
where datalength(TableID)<>LEN(TableID)
and ascii(SUBSTRING (TableID, LEN(TableID)+1, 1)) =32

/*7b) UDF contains extra spaces in field AliasID in User-fields
description CUFD table*/

select * from CUFD
where datalength(AliasID)<>len(AliasID)
and ascii(SUBSTRING (AliasID, LEN(AliasID)+1, 1)) =32

/*😎 UDF exists but is not defined*/

select T1.name, T0.name from sys.columns T0 join sys.objects T1 on T0.object_id = T1.object_id
left join CUFD T2 on T2.TableID = T1.name and ('U_' + T2.AliasID) = T0.name
where T1.type = 'U' and T0.name like 'U/_%' escape '/'
and ('U_' + T2.AliasID) is null
and (T0.name !='U_NAME' and T1.name not in ('OUSR', 'AUSR'))

Update Query with description:

/*1)Below query will delete all users defined tables which are defined but not exist in SQL Server.*/

delete OUTB where '@'+TableName not in (
select name from sysobjects where xtype='U'
)

/* 2 ) We recommend to remove the tables displayed by the query from the database directly in the database interface. Please consider this solution according to your customization. */

/*3)  Below query will delete all users defined fields which are defined on an unregistered UDT.*/

delete from CUFD where left(TableID,1)='@' and not exists (
select 1 from OUTB where '@'+TableName = TableID or
'@'+LogTable = TableID)

/*4) Below query will delete all users defined fields which are  defined but not exist in SQL Server.*/

delete CUFD where not exists (
select t0.name, t1.name
from sysobjects t0 inner join syscolumns t1
on t0.xtype='U' and t0.id=t1.id
where t0.name=TableID and t1.name='U_'+AliasID)
and TableID not in ('BTNT', 'OIBT', 'OSRI', 'SRNT')

/*5)  Below query will delete all users defined fields' valid values which are defined for non-exist UDF.*/

delete UFD1 where not exists (
select 1 from CUFD where TableId=UFD1.TableId and FieldID=UFD1.FieldID
)

/*6) Update the size of the UDF in Application.*/

/*7)Below query will trim extra spaces in the table name. */

/*7a) extra spaces in TableID of CUFD:*/

update CUFD
set TableID = replace (TableID,' ', '') where datalength(TableID)<> LEN
(TableID) and ascii(SUBSTRING (TableID, LEN(TableID)+1, 1)) =32

/*7b) extra spaces in AliasID of CUFD:*/

update CUFD
set AliasID = replace (AliasID,' ', '') where datalength(AliasID)<> LEN
(AliasID) and ascii(SUBSTRING (AliasID, LEN(AliasID)+1, 1)) =32

/*😎 We recommend to remove the columns displayed by the query from the database directly in the database interface. Please consider this solution according to your customization.*/

hope that helps..

Regards,

Marcelo Silva Santos