Solved

Looking for a RTVDIRE command (function)

Posted on 2011-09-21
26
908 Views
Last Modified: 2012-05-12
Hi Experts,

Can someone tell me how to retrieve the ccMail addres from the DIRE info?
I found the file, but the start position is variable and not sure how to get it.

It's stored in field WOK9OPT of file QUSRYS/QAOKP09A.

Of cause I can scan for @ and check backwards to the first "invalid" character but that is not secure enough (I think).

Is there an other option?

Thanks,
Murph
0
Comment
Question by:theo kouwenhoven
  • 11
  • 8
  • 7
26 Comments
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
As far as I know, you're going to have to extract it similar to the way you describe.  This is a good job for Regular Expressions.  You compose a Regular Expression (think of it as a template or mask that matches the FORMAT of a valid email address) that matches your address format, and then use a function that supports regular expressions to extract the portion that matches.

Here is a little Java example that extracts a substring matching a regular expression (and it happens to have a Regex for an email address in the example!).

http://www.java2s.com/Code/Java/Regular-Expressions/Extractasubstringbymatchingaregularexpression.htm

Here is a nice RPG example, using the system Regular Expression API's.  This technique doesn't actually extract the substring, but it gives you the beginning and ending positions of the substring, which is almost as good.  (You might have to register for free to get this):

http://systeminetwork.com/node/26451

Finally, here is a nice primer on regular expressions, inc case you aren't familiar:

http://docs.activestate.com/komodo/4.4/regex-intro.html

Note that regular expression syntax varies a little bit from implementation to implementation, so not all examples will work everywhere.

Hope that helps.

- Gary Patterson

0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
If you need to pull data from the system directory, you should call the Search System Directory (QOKSCHD) API. It can look ugly when reading through it, but the QSYSINC/QRPGLESRC file has member QOKSCHD which helps a lot. You'll probably use the SREQ0100 format, so data structure QOKS0100 should get you started.

Tom
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hi Tom, Gary,

I checked QOKSCHD, but no format seems to match.
What I find already about field WOK9OPT
1-2 (Bin) is the length of the complete string
3-3 (bin) seems to be allways X'0B'
4-12 (Bin data) ??
13-14(bin) Length of next field
Var (Char) First name
+1 (bin) seems to be allways X'0B'
+10 pos (bin data) ??
+1 (bin) Length of next field
Var (Char) Last name
+1 (bin) seems to be allways X'0B'
+10 pos (bin data) ??
+1 (bin) Length of next field
Var (Char) ccMail
+1 (bin) seems to be allways X'0B'
+10 pos (bin data) ??
+1 (bin) Length of next field


So far it looked good :-)

But if No First and lastname is entered, the X'0B' values are not always there

If all 3 fields are missing the structure looks totaly diferent.


The repeating group between fields looks like:
0B0700
274C0F
Where the last char 0F or 000F could be the field length, but I don't heve enough material to compare on this machine.

If you can add more info, You're welcome :-)


Murph



0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
...no format seems to match.

No format will match the format of the file. The API formats match what the API creates. The field in the file can change for a number of reasons.

The API understands the file. It extracts the data you request and places it into the receiver variable format according to how you requested it.

Show a sample of a directory entry and say exactly what data you want to extract. Also tell us what data you have that can be used to locate the directory entry. (I would normally assume that you have USRID and USRADDR values; but you might only have the user profile name, i.e., the USER field.)

I can probably construct a request variable for you for the API. In ILE RPG? CL? ...probably after work hours, though.

Tom
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
I need to retrieve the Full name and the ccMailaddres.

I have a UserId (Userprofile) and via QAOKL02A I have the UserID and Location from the System Directory.
(working with a Dutch OS :-( and can't remeber the right english decr.)
I can retrieve the full name from Field WOK9FULL via Logical QAOKL12A.

Via this same Logical, can see the ccMail contents in field WOK9OPT.

ILERPG is fine....

Thanks.

Murph
0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
(ccMail is still around? I didn't realize that -- Tom)
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
I don't know, but everything else then Microsoft is fine to me :-)

But the ccMial addres in the DIRE is the place where my customer is storing the mailaddresses.

0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
I think the ccMail address is used for Domino addresses.

- Gary
0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
Ah, Domino would make sense. I have some basic *SMTP address request coding. I was looking at how to structure it for testing against a ccMail attribute. I haven't forgotten; work just keeps adding delays.

Tom
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hmm oke that makes sence, in the past they used Domino...
Now the mail addersses are stored in an Outlook server and because of some
stupid security rules, I'm not allowed to get the info from there.
Asking for an export to a file seems also be a security violation :-(

Yes the guy is a MCSE but the IT manager :-(
0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
Murph,

Do you have an Exchange mail account on the customer's email domain?  If so, and if you can search the directory, then you can extract information from the Active Directory (the directory provider for Exchange) directory yourself.  You can use a tool like this:

http://www.manageengine.com/products/free-windows-active-directory-tools/free-active-directory-tools-index.html

Or you can use tools like ADSI (ADSI = Active Directory Scripting Interface) to access Active Directory (that is where Exchange directory information is stored) via scripting interfaces:

http://gallery.technet.microsoft.com/scriptcenter/81865fd8-6bdf-44d6-844b-01f262dc853e

- Gary Patterson
0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
Talking about ADSI got me thinking about LDAP:

You can query Windows AD via the LDAP protocol from AS/400 programs:  http://www.itjungle.com/fhg/fhg061505-story01.html
or from a generic LDAP client, like Jexplorer:  http://jxplorer.org/
or from the Qshell ldapsearch utility
or using Java or OS/400 system LDAP APIs

Even more interesting, AS/400 Directory Services provides an LDAP server that is can be automatically synched with the System Distribution Directory (since V5R1 - before then you had to sync them manually, I seem to recall).  If the LDAP server is running on the AS/400, or if you can configure it and start it, it is possible that you may be able to use an LDAP client to query the directory and obtain the information you need in a usable format.  System Distribution Directory information is automatically synchronized with Directory Services.

This relatively old Redbook "Implementation and Practical Use of LDAP on the IBM eServer iSeries Server" explains how to configure Directory Services , publish System Distribution Directory information into DS, and and how to access DS via various LDAP tools:

http://www.redbooks.ibm.com/abstracts/sg246193.html

Definitely worth a look.  Warning:  I haven't specifically tried to extract the ccMail attribute via LDAP, so I don't know how to go about that.

- Gary Patterson
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Gary,

I can extract info via the PC, but when my project is done,
the application should be running by it self.
On top of that, I don't like to be depending on a MS server...
No guarantee that next Win release (or mail server) is compatible,
It's still Microsoft.... No I like to have it in th AS/400...

Will check the LDAP option and wait for Toms sollution


Thanks
0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 27

Accepted Solution

by:
tliotta earned 125 total points
Comment Utility
Since I don't have a ccMail example (and actually not even a RPG example), I'm posting first a basic set of the QOKSCHD data structures in RPG (IV). These could be fine-tuned in a variety of ways. I would actually probably have many of these be BASED() structures and simply point them wherever they needed to be, but a couple later pieces might seem more sensible doing things the old way. A number of these DSes aren't used in the code snippet that follows, but I figured I'd create them anyway, just in case I would use them some day. The DSes come from QSYSINC originally. Those always need some work, so these have a few differences.

The code snippet that is added is currently just a set of EVALs that populate fields in the DSes that make up the "request variable". Those DSes are then copied into different parts of the "request variable" to define the actual request. They shouldn't really be copied but rather BASED(), but I'm leaving that alone here.

The request that gets built essentially says "Given this USRID and USRADR (user ID and address), return any associated CCMAILADR in the receiver variable." Note that because two variables are used to search over, the QOKS0102 DS is used twice. I.e., two copies are added on to the request variable.

Also note that I can't build a full function since I don't have Domino to play with (nor any ccMail address). But this should cover essentially all of building the request as long as the USERID and USRADDR variables get defined and have valid values in them.

The call to the API is fairly straightforward. The format name of the receiver variable will be 'SRCV0100' and the format name of the request variable will be 'SREQ0100'.

The DSes for segments of the receiver variable can overlay areas of the receiver variable or substrings can copied into the DSes.

I haven't used the 'attached files' feature here yet, so I expect to add some more comments after I see what happens when I Submit...

Tom

/if defined( QOKSCHD_full_req )
     D*****************************************************************
     D*Prototype for calling search API QOKSCHD OPM
     D*****************************************************************
     D QOKSCHD         C                   'QOKSCHD'
      /endif
      /if defined( SREQ0100_req )
      /undefine SREQ0100_req
     D*****************************************************************
     D*Type Definition for the SREQ0100 format.
     D*****************************************************************
     DQOKS0100         DS
     D*                                             Qok SREQ0100
     D QOKCCSID                      10i 0
     D QOKDICS                       10i 0
     D QOKDICP                       10i 0
     D QOKDCARD                       4
     D QOKCRI                         1
     D QOKDTS                         1
     D QOKVI                          1
     D QOKRCH                         1
     D QOKRRH                        16
     D QOKRAF                         8
     D QOKRAO                        10i 0
     D QOKRAE                        10i 0
     D QOKFTRAF00                     8
     D QOKFTRAO                      10i 0
     D QOKFTRAE                      10i 0
     D QOKUTRAF                       8
     D QOKUTRAE                      10i 0
     D QOKFRAF                        8
     D QOKOOFRF00                     8
     D QOKRIOR                        1
     D QOKRSV4                        3
     D*QOKSRA                         1
     D*                                       Varying length field
     D*QOKAFTR                        1
     D*                                       Varying length field
      /endif
      /if defined( SREQ0101_req )
      /undefine SREQ0101_req
     D*****************************************************************
     D*Type Definition for the SREQ0101 format.
     D*****************************************************************
     DQOKS0101         DS
     D*                                             Qok SREQ0101
     D QOKCEL                        10i 0
     D QOKCV                          1
     D QOKRFN                        10
     D QOKRPID                        7
     D QOK1                           1
     D QOKRSV2                        1
     D QOKRFL                        10i 0
     D*QOKRFV                         1
     D*                                       Varying length field
      /endif
      /if defined( SREQ0102_req )
      /undefine SREQ0102_req
     D*****************************************************************
     D*Type Definition for the SREQ0102 format.
     D*****************************************************************
     DQOKS0102         DS
     D*                                             Qok SREQ0102
     D QOKFTRFN                      10
     D QOKTRPID                       7
      /endif
      /if defined( SREQ0103_req )
      /undefine SREQ0103_req
     D*****************************************************************
     D*Type Definition for the SREQ0103 format.
     D*****************************************************************
     DQOKS0103         DS
     D*                                             Qok SREQ0103
     D QOKRSV                        10
      /endif
      /if defined( SREQ0200_req )
      /undefine SREQ0200_req
     D*****************************************************************
     D*Type Definition for the SREQ0200 format.
     D*****************************************************************
     DQOKS0200         DS
     D*                                             Qok SREQ0200
     D QOKFTTR                        1
     D QOK200CH                      17
      /endif
      /if defined( SRCV0100_req )
      /undefine SRCV0100_req
     D*****************************************************************
     D*Type Definition for the SRCV0100 format.
     D*****************************************************************
     DQOKS010000       DS
     D*                                             Qok SRCV0100
     D QOKBRTN                       10i 0
     D QOKOAO                        10i 0
     D QOKUAO                        10i 0
     D QOKERTN                       10i 0
     D QOKRCH00                       1
     D QOKRRH00                      16
      /endif
      /if defined( SRCV0101_req )
      /undefine SRCV0101_req
     D*****************************************************************
     D*Type Definition for the SRCV0101 format.
     D*****************************************************************
     DQOKS010100       DS
     D*                                             Qok SRCV0101
     D QOKLTU                        10i 0
     D QOKUFRTN                      10i 0
      /endif
      /if defined( SRCV0111_req )
      /undefine SRCV0111_req
     D*****************************************************************
     D*Type Definition for the SRCV0111 format.
     D*****************************************************************
     DQOKS0111         DS
     D*                                             Qok SRCV0111
     D QOKRTNFN                      10
     D QOKRPID00                      7
     D QOKRSV1                        3
     D QOKRFCS                       10i 0
     D QOKRFCP                       10i 0
     D QOKRTNFL                      10i 0
     D*QOKRTNFV                       1
     D*                                       Varying length field
      /endif
      /if defined( SRCV0112_req )
      /undefine SRCV0112_req
     D*****************************************************************
     D*Type Definition for the SRCV0112 format.
     D*****************************************************************
     DQOKS0112         DS
     D*                                             Qok SRCV0112
     D QOK12FCS                      10i 0
     D QOK12FCP                      10i 0
     D QOK112FL                      10i 0
     D*QOK112FV                       1
     D*                                       Varying length field
      /endif
      /if defined( SRCV0120_req )
      /undefine SRCV0120_req
     D*****************************************************************
     D*Type Definition for the SRCV0120 format.
     D*****************************************************************
     DQOKS0120         DS
     D*                                             Qok SRCV0120
     D QOK120FN                      10
     D QOK20PID                       7
      /endif
      /if defined( SRCV0200_req )
      /undefine SRCV0200_req
     D*****************************************************************
     D*Type Definition for the SRCV0200 format.
     D*****************************************************************
     DQOK0200A         DS
     D*                                             Qok SRCV0200A
     D QOKNAFN                       10
     D QOKNAPID                       7
     D QOKNAFT                       10
     D QOKRSV3                        1
     D QOKNAMFL                      10i 0
     DQOKS020000       DS
     D QOKFNRTN                      10i 0
     D QOKFNAVL                      10i 0
     D QOKFNAO                       10i 0
     D QOKFNCH                       17
     D*QOKDFN                        32    DIM(00001)
     D* QOKNAFN00                    10    OVERLAY(QOKDFN:00001)
     D* QOKNAPID00                    7    OVERLAY(QOKDFN:00011)
     D* QOKNAFT00                    10    OVERLAY(QOKDFN:00018)
     D* QOKRSV300                     1    OVERLAY(QOKDFN:00028)
     D* QOKNAMFL00                    9B 0 OVERLAY(QOKDFN:00029)
     D*                                          Varying length
      /endif
     D szQOKS0100      s             10i 0 inz( %size( QOKS0100 ) )
     D szQOKS0101      s             10i 0 inz( %size( QOKS0101 ) )
     D szQOKS0102      s             10i 0 inz( %size( QOKS0102 ) )
     D szQOKS0103      s             10i 0 inz( %size( QOKS0103 ) )
     D szQOKS010100    s             10i 0 inz( %size( QOKS010100 ) )
     D szQOKS0112      s             10i 0 inz( %size( QOKS0112 ) )

     D rqvOffset       s             10i 0 inz( 1 )

     D ReqVar          s            256    inz

Open in new window

* Populate the QOKS0100 struct...

     C                   eval      QOKCCSID    =  0
     C                   eval      QOKDICS     =  0
     C                   eval      QOKDICP     =  0
     C                   eval      QOKDCARD    =  ' '
     C                   eval      QOKCRI      =  '0'
     C                   eval      QOKDTS      =  '0'
     C                   eval      QOKVI       =  '1'
     C                   eval      QOKRCH      =  '0'
     C                   eval      QOKRRH      =  '                '
     C                   eval      QOKRAF      =  'SREQ0101'
      * QOKRAO says the offset to the SREQ0101 data is right after the data from
      * the QOKS0100 structure. So use the size of QOKS0100 for an offset...
     C                   eval      QOKRAO      =  szQOKS0100
     C                   eval      QOKRAE      =  2
     C                   eval      QOKFTRAF00  =  'SREQ0102'
      * QOKFTRAO says the offset to the SREQ0102 data is right after the data from
      * the QOKS0100 struct and after the QOKS0101 struct that we added to it. So
      * use the size of those two added together for the offset...
     C                   eval      QOKFTRAO    =  szQOKS0100 + szQOKS0101
     C                   eval      QOKFTRAE    =  1
     C                   eval      QOKUTRAF    =  'SRCV0101'
     C                   eval      QOKUTRAE    =  1
     C                   eval      QOKFRAF     =  'SRCV0112'
     C                   eval      QOKOOFRF00  =  '        '
     C                   eval      QOKRIOR     =  0
     C                   eval      QOKRSV4     =  '   '

      * ...move the QOKS0100 struct data into request variable,
      * and bump the offset by its length

     C                   eval      ReqVar      =  QOKS0100
     C                   eval      rqvOffset  +=  szQOKS0100

      * Populate the QOKS0101 struct for a USRID search...

     C                   eval      QOKCEL      =  38
     C                   eval      QOKCV       =  '1'
     C                   eval      QOKRFN      =  'USRID     '
     C                   eval      QOKRPID     =  '*IBM   '
     C                   eval      QOK1        =  '0'
     C                   eval      QOKRSV2     =  ' '
     C                   eval      QOKRFL      =  10
     C                   eval      QOKRFV      =  USERID

      * ...move the QOKS0101 struct data into request variable at the end,
      * and bump the offset by its length
     C                   eval      %subst( ReqVar : rqvOffset : szQOKS0101 ) =
     C                                            QOKS0101
     C                   eval      rqvOffset  +=  szQOKS0101

      * Populate the QOKS0101 struct for a USRADDR search...

     C                   eval      QOKCEL      =  38
     C                   eval      QOKCV       =  '1'
     C                   eval      QOKRFN      =  'USRADDR   '
     C                   eval      QOKRPID     =  '*IBM   '
     C                   eval      QOK1        =  '0'
     C                   eval      QOKRSV2     =  ' '
     C                   eval      QOKRFL      =  10
     C                   eval      QOKRFV      =  USRADDR

      * ...move the QOKS0101 struct data into request variable at the end,
      * and bump the offset by its length
     C                   eval      %subst( ReqVar : rqvOffset : szQOKS0101 ) =
     C                                            QOKS0101
     C                   eval      rqvOffset  +=  szQOKS0101

      * Populate the QOKS0102 struct for a CCMAILADR request...

     C                   eval      QOKFTRFN    =  'CCMAILADR '
     C                   eval      QOKTRPID    =  '*IBM   '

      * ...move the QOKS0102 struct data into request variable at the end...
      * but no need to bump the offset by its length since we're done...
     C                   eval      %subst( ReqVar : rqvOffset : szQOKS0102 ) =
     C                                            QOKS0102

Open in new window

0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
Hmmm... not too bad. I'll see about putting a full working example here that requests an SMTP address. Any differences might even help illustrate the whole mess.

Tom
0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
If the addresses stored in AD are valid for your uses and they can be retrieved via LDAP, that would be a potentially very good solution. I probably wouldn't use the Java solution except as verification for native code tests, though. Besides, I'd rather work up some LDAP functions in RPG than do more system directory code...

Tom
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hi Tom,

Thanks, I have to work for an other customer today and can pick this up next Tuesday

Have a nice weekend.
Murph
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hi Both,

I found a way to get the right info, but still interested in the way Tom discribed.

The first 2 pos of the field WOK9OPT give the length of the variable.
The string contains a describing blockof 12 pos.
Pos 1-2 is the field type 11-12 the length of the following string,

So scanning for x'0BBD'Gives the first name etc.
Maybe it isn't the most easy way, but it works....
I only had a limited number of records to check, so next week I will try to check the production server.

But agai, I'm still very interested in the way Tom posted.... I realize that that is a un developed point in my knowledge


Thanks and have a nice weekend.

Regards,
Murph
0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
I know you already found another way to get this, but I just noticed that the AS/400 Java Toolbox RUser class has an attribute for the CCMail address.  Looks like a very easy way to retrieve this without a lot of effort:

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r1/index.jsp?topic=/com.ibm.etools.iseries.toolbox.doc/javadoc/com/ibm/as400/resource/RUser.html

Attribute is: CC_MAIL_ADDRESS

- Gary Patterson
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hi Gary,

My Java knowlege is 0,0 (and I'm happy with that:-)... so developing in java isn't my thing.. I can read it a little. I don't know anybody that is able to develop this for me. The person's I know. on this moment, that can write java don't know how to spell out AS400, so are of no use:-).

But Thanks anyway, I will save that link...

How can I divide the points guys?

 

0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
Understand - just including if for the sake of completeness.

- Gary
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
How can I divide the points guys?
0
 
LVL 27

Expert Comment

by:tliotta
Comment Utility
How can I divide the points guys?

Any way you want?

You did decide to go with your own method, so I can't lay claim to anything.

I will add that it doesn't look like your method would work on at least one system here. That system doesn't show x'0B' between the portions of the field, so I'm not sure what the system actually uses. There might be a reason why some systems are different.

I don't know if any non-character binary/hex values ever show up in there in sub-fields. If they do, the x'0B' might show up anywhere.

Tom
0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
Hi Tom,

"You did decide to go with your own method, so I can't lay claim to anything."...
It's the cu$tomer that let me know not to $pend to much time to that (time = money)...

But I will try your solution for sure..... but that will take a little, because my job will run to at least december  

0
 
LVL 34

Expert Comment

by:Gary Patterson
Comment Utility
QAOKP09A is an operating system managed file, and is not designed to provide an end user interface to the system distribution directory.  I can't find anyplace where it is documented as a "supported" interface.

The primary supported interface, of course, is the QOKSCHD API.  The Java Toolbox RUser class is a secondary supported interface.

Since the file QAOKP09A is not a published, supported interface, it may be implemented differently from version to version.  Data formats could even conceivably change from PTF to PTF within the same version.  I haven't worked much with this and the other system directory files, other than to solve problems a few times - typically after a system restore, migration, or upgrade, so I have no idea how much or how frequently the layout of this data changes.

I can tell you that if my name that was going to be on this code, I'd make sure that the the client knew (in writing) that they are building an application on top of an unsupported interface, which could negatively impact the stability of the application in the future.  The "industry best practice" is to always use a supported interface, when one exists.

Honestly, I don't show clients unsupported interfaces as an alternative unless there is just no way to get the data through a supported interface.  

I worked for an AS/400 software house some years years ago that developed a very clever context-sensitive "help" system, but it required a patch to an OS program, and PTFs and upgrades almost always broke it.  Frustrating for us, and very frustrating for all of our clients.  Finally, after years of dealing with it, the company pent a little more time and effort to develop a UIM-based help system that worked through supported help interfaces.  Over the years, we spent FAR more time, money, frustration, and generated hundreds(?) of customer help tickets continually fixing the unsupported patch-based system than if it had been designed properly in the first place.  A big customer finally put their foot down and forced us to fix it, if I recall correctly.

If the client already knows about the QAOKP09A approach, then maybe you could notify the client that there is a "cheap but risky" way to do it, and a "slightly more expensive, but correct" way, provide them with estimates and explain why using a supported interface is smartest, and then I leave it up to them.  If they still want the "cheap" way, that is their prerogative, and you do it in good conscience, knowing that you have advised them properly (and documented it in writing ...).

Then at least you have a piece of paper with the client's signature on it explaining why, should it suddenly break when a new PTF is applied, and they have to pay all over again to get it fixed - and the new manager asks you why you didn't do it right the first time.

The problem, of course, is that when it breaks, you might not get invited back - especially if you get blamed for the flaw (or the client manager doesn't want you telling his boss "I told him not to do it that way.)

Personally, I think it is better to not even show them the unsupported interface in the first place.

- Gary Patterson

0
 
LVL 16

Author Comment

by:theo kouwenhoven
Comment Utility
You are 100% right Gary,

I told the customer (IT manager with a degree and no experience)... but he knows it all.... :-)

0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

This article explains in simple steps how to renew expiring Exchange Server Internal Transport Certificate.
HOW TO: Connect to the VMware vSphere Hypervisor 6.5 (ESXi 6.5) using the vSphere (HTML5 Web) Host Client 6.5, and perform a simple configuration task of adding a new VMFS 6 datastore.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now