Role removal from Multiple users

Hi All
I have a query related to removal of roles from user profile.
I want to delete a particular role from a set of users (say more than 600 users)
is it possible with su10 you to  remove the role from the users  at a stretch or is it the right way to get it removed from the user tab in PFCG and get the user- master record adjusted?
Please Suggest

Hi,
Preferably, you should use PFCG for your need...
It will be a easiest way to perform this task...
After that dont forget to do "user comparison"...
Regards.
Rajesh Narkhede

Similar Messages

  • OIM 11.1.1.5 BP2 Roles removed from users automatically

    Hi All,
    We are using OIM 11.1.1.5 BP02 and facing issues with event handlers, role membership and access policy. We have a custom post create user handler and a custom user post update event handler. We are creating users through trusted reconcilication by using EBS Employee Recon connector and provisioning users to AD & Exchange by using the 11.1.1.5 ICF connectors.
    The issue we are seeing is with the Roles of the users, the behavior we are seeing is that, on user creates through trusted recon, the users are getting roles correctly and then the resources are assigned correctly, but after sometime, the roles are removed from the user. We donot have 'Revoke if no longer applies' on the access policy and thus the resources are appearing fine for the user, but we donot want roles to be removed from the user since the rule membership rules criteria is still holding good for the user.
    We are seeing this issue only with trusted reconcilication and not when we create users through the UI. Our custom event handlers have the same logic for both the execute methods; with the difference that the bulk execute method is working on the array of identities received from trusted recon while the normal execute method working on just one identity through the UI.
    We are doing complex computation in the event handlers (& setting multiple fields of the user) and are forced to use UserManager API to set the fields in the create user handler (Following article: 1469286.1); this we believe is effecting the ordering of the custom event handler and the OOTB Role ChangeCalculator event handler.
    We have already checked the bugs(14075985 & 14221435) and wanted to confirm if we are hitting the same and/or how can we debug this more. We have already checked the UPA_USR table but that does not tell us as to why the role is revoked from the user.
    Anyone faced similar issue?
    Thanks,
    Bikash

    The patch we were given was 14226386, also called 11.1.1.5.2AK. The readme has the following overview:
    This patch addresses the concurrency issues encountered in 11g R1 PS1 as described below
    1. Unlike in OIM 11g R1 PS1, when a user's role membership changes policy evaluation doesn't
         kick off immediately. Instead the user is flagged for policy evaluation in the future.
         'Evaluate User Policies' scheduled task then triggers policy evaluation for such users.
         The scheduled task ensures that there is only one policy evaluation for a user at any
         given time. So, duplicate accounts or entitlements wouldn't be provisioned to a user.
         With this fix, access policy based provisioning events will be triggered only when
         'Evaluate User Policies' scheduled task runs. Hence, the frequency of this scheduled
         task needs to be tuned for the customer's deployment. The recommendation is to set it to
         10 minutes.
         In addition to binary changes, this fix involves data model and metadata changes as
         described below.
    2. In a custom event handler, use Platform.getServiceForEventHandler() instead of
    Platform.getService() to get a handle to a Service available in OIM before making an API
         call. This ensures that the API completes in its entirety (including any post processing)
         when it returns. Also, this brings in predicability in the order of execution of OIM
         events on the same entity created from one another.
    3. When trusted source reconciliation brings in multiple events on the same user these events
    are processed by OIM sequentially.
    But since then BP03 and BP04 have been released, I would suggest you find out if BP04 has resolved this from support before applying anything.
    -Kevin

  • Deleting roles from multiple users simultaneously

    I need to delete all of the roles from multiple users and I was wondering if anyone knows of a way to do it simultaneously other than  a Mercury script(it wont take the roles away that are lower than the initial 20)?

    Hi there,
    there could be easier ways to do it, but this is how I'd go about it if I didn't want to go to each user ID.
    Get a list of all roles assigned to your users you want to restrict from SUIM (display the list of users via tcode S_BCE_68001400).  Click on the 'roles' button and it will pull up a list of all the roles assigned to those users.  Extract and save that).
    Filter the list so you have only one entry of each role name.
    Then go to SU10, enter in all your user IDs to change and go to the role tab, enter the unique list and put wide dates on it say from 01.01.1995 - 31.12.9999 (you want them earlier than the earliest role 'valid from' date and later than the latest role 'valid to' assignment).
    Click the 'Remove' box and save and you should have all roles removed.
    Good luck with it.
    Cheers,
    Dianne

  • Streaming from multiple user accounts......problem

    With my initial set up I had no problem. I have a large iTunes Library. 48k songs. Over 270 GB of files. I synced a few photos and some music for the AppleTV slide shows but everything else I was going to stream. Streaming is working wonderfully from MY user account but if I try and stream a similar sized library from another user account on the same computer it is "NO JOY". I get the "loading library" dialog with the little circle of dashes going round and round but it eventually gives up and does not load. I have tried this with iTunes running on my user account and with iTunes turned off on my user account and either way the library from the other user account will NOT load. I am at a loss here. The set up for the second user went smoothly. I clicked add a library and got a key code on my TV screen. AppleTV showed up in the devices column in iTunes of the second user account and accepted the key code but like I said earlier the library will just not load for streaming. Streaming from my first user account is still working well. I have not found any discussion topics dealing with streaming from multiple user accounts. Hopefully someone who is doing this will chime in and help me out if possible.

    The only way I have been able to get this to work is to quit the iTunes that I am currently streaming from. Switch (on the computer) users to the library I want to stream from. Start iTunes on that user. If I follow this I can get AppleTV to load the library of the second user. If I do NOT quit iTunes from the first user it will not load the second user's library. If I have iTunes from the second user running at the same time I quit the first user's iTunes it will NOT load the second users library. I guess it is a bug and will need to be fixed with the next software release. I would like to be able to switch among user libraries at will and independent of which user is currently using the computer.

  • Merge iweb sites from multiple user accounts on same computer

    With the previous iweb version, my children created their own iweb sites on their own users, but all under my own .mac account. It worked great.
    But now with the new "upgraded" iweb '08, that isn't allowed anymore.
    So, I created a new user on our computer for all of us to use to maintain our multiple iweb accounts on.
    How can I move multiple iweb sites from multiple users on the same computer into one user?

    Each of the user's work in iWeb will be contained in a single file, Domain.sites2, which can be found in this location on the hard drive for each user account. You will need to copy all of these Domain.sites2 files to an external drive, or, at the very least, burn them to a disk to make them transferable from one user account to another. A flash drive also works great for this.
    Once you have made all of these Domain files accessible from the new user account that you created, you will still have a formidable task ahead of you, i.e., publishing separate sites, from separate Domain.sites2 files, to the same .Mac account/directory. In other words, bringing all of these Domain files together for access by a single user account will not solve the problem. You may very well be able to solve the problem with things the way they are, but it will involve some shuffling of Site's files on the iDisk prior to publishing.
    The method I'm going to give you has worked well for me. So far, here in the forums, I've read posts from (2) other users who were also successful. Conversely, I know of at least (3) other users who have been unsuccessful with this approach. I sure hope it works for you.
    Open System Preferences and go to .Mac. Turn syncing off, if it is on, and leave it off.
    Now, in Finder, navigate to the current Site files on your iDisk, following this path:
    Go/iDisk/My iDisk/Web/Sites/NameOfSiteFolder
    Drag the Site folder that is named for your site, (not the directory Site folder), back one level on the iDisk, into the Web folder. This is where some run into difficulties--you may get an error message that the folder is "in use, and cannot be moved". I have never gotten this message, and am able to move my Site's folders around with no problem on the iDisk.
    If you are successful moving the folder, choose one of your other accounts on your machine, launch iWeb, and Publish all to .Mac. The existing site on the server will not be deleted. Now, go back to the iDisk and move that site folder, (the one you just published), back one level, again, to the root Web directory. Publish your next site, from your next account.
    When you are finished publishing sites, just move the Site folders back to their original location on the iDisk--Web/Sites/SiteFoldersHere. All sites will be accessible from a browser using the web.mac.com/username/nameofsite url.
    It is important to use the Publish all to .Mac command in iWeb. A simple Publish to .Mac command will not put the correct index.html file in place on the server.
    Post back and inform us of your success.
    -Mark

  • Importing Photos and Music from Multiple users on the same Mac

    I am the same person with multiple users on one iMac. I need to have the same pics and music files on all of the user names on the one computer.
    I have the family pack MobileMe plan.
    Where are the files located for the photos and music in iTunes?
    I would like to import them from one user to another user on the same computer.
    Thank you

    Welcome to the Apple Discussions.
    If you Import the files from one User to another then you will use double the disk space on your HD as you will have multiple copies of everything. Why not simply share the files between accounts?
    For iPhoto 09 (version 8.0.2) and later:
    What you mean by 'share'.
    If you want the other user to be able to see the pics, but not add to, change or alter your library, then enable Sharing in your iPhoto (Preferences -> Sharing), leave iPhoto running and use Fast User Switching to open the other account. In that account, enable 'Look For Shared Libraries'. Your Library will appear in the other source pane.
    Any user can drag a pic from the Shared Library to their own in the iPhoto Window.
    Remember iPhoto must be running in both accounts for this to work.
    If you want the other user to have the same access to the library as you: to be able to add, edit, organise, keyword etc.
    Quit iPhoto in both accounts. Move the Library to the Users / Shared Folder
    (You can also use an external HD set to ignore permissions, a Disk Image or even partition your Hard Disk.)
    In each account in turn: Double click on the Library to open it. (You may be asked to repair the Library Permissions.) From that point on, this will be the default library location. Both accounts will have full access to the library, in fact, both accounts will 'own' it.
    However, there is a catch with this system and it is a significant one. iPhoto is not a multi-user app., it does not have the code to negotiate two users simultaneously writing to the database, and trying will cause db corruption. So only one user at a time, and back up, back up back up.
    Regards
    TD

  • Is there any way to merge data from multiple user accounts on the same mac?

    After a HD crash I reconstructed from Time Machine. Somehow I created multiple users and the data is different. I'd like to eliminate the user accounts and get to just a single user. Anything there?

    Have a read here http://web.me.com/pondini/AppleTips/Transfer.html
    Stefan

  • Loading multiple files from multiple users.

    Our system is moving from a standalone app to a web system. The users will have export files generated by our app which they will need to import up to the web. In the web system, the users are connecting via SSO, so apps server is using a single JDBC connection and we are querying the CLIENT_IDENTIFIER at the database end to see who is doing what.
    The export file is essentially a zip with the first file being a list of which filenames in the zip translate to what tables in the database they are from.
    The new system will require a little work on each file to update certain things prior to actually inserting the data to its final destination.
    My confusion is how to best do this. What we essentially need to do is move the data from the text file into a table along with some flag for identifying the user that put it there. Then update the data as needed and finally insert it to the final table destination. The first thought was to use external tables. However if you have two users importing at the same time, how do you differentiate the data? The other idea was to use sqlldr. The trouble was there is no way (that I'm aware of) to be able to add the flag for who's data this is on the way over with sqlldr, it will only bulk copy the data from the file over to the table you specify.
    So the basic question is how do I get data for a single table into the system when I have multiple users (SSO signed on using the same DB connection via apps) uploading their own copies of data ultimately headed for the same database table but the data needs a little modification on the way? What's the best way to do this?
    Thanks.

    Our system is moving from a standalone app to a web system. The users will have export files generated by our app which they will need to import up to the web. In the web system, the users are connecting via SSO, so apps server is using a single JDBC connection and we are querying the CLIENT_IDENTIFIER at the database end to see who is doing what.
    The export file is essentially a zip with the first file being a list of which filenames in the zip translate to what tables in the database they are from.
    The new system will require a little work on each file to update certain things prior to actually inserting the data to its final destination.
    My confusion is how to best do this. What we essentially need to do is move the data from the text file into a table along with some flag for identifying the user that put it there. Then update the data as needed and finally insert it to the final table destination. The first thought was to use external tables. However if you have two users importing at the same time, how do you differentiate the data? The other idea was to use sqlldr. The trouble was there is no way (that I'm aware of) to be able to add the flag for who's data this is on the way over with sqlldr, it will only bulk copy the data from the file over to the table you specify.
    So the basic question is how do I get data for a single table into the system when I have multiple users (SSO signed on using the same DB connection via apps) uploading their own copies of data ultimately headed for the same database table but the data needs a little modification on the way? What's the best way to do this?
    Thanks.

  • Viewing itunes content from multiple user ids

    We have multiple users on one iMAC.  How do I enable each user to view and use our itunes content from each individual user account?
    Thanks, P

    Thank you very much for your help!
    He is really good at informatics and his best friend (who allegedly hacked my iPhone) is an IT freak whereas I'm very bad at it.
    I don't use iCloud or PhotoStream. He has an iPod, but we definitely don't have the same username.
    My iPhone hasn't been jailbroken, but allegedly one can hack it with the help of the IP address (that's what he told me).
    He transfered all data from my computer to his computer (including iTunes).
    He said he read the messages in iTunes (after the transfer). But I deleted the messages with this contact almost half a year ago.
    I rummaged in my laptop for this information but I didn't find anything.
    I am very perplexed about this whole situation and curious if he is just lying to me to just to find something out about some problems we had before. I have no idea when it comes to stuff like this.

  • GRC 10 Role based firefighter multiple users

    Hi All
    We are using GRC AC 10 SP12 and have Role based EAM implemented. We are looking at way to prevent the same user from being assigned multiple firefighters or a way for approver to know that another Firefighter ID is already assigned to this user?
    Thanks in advance
    Regards
    Vijaya

    Hi Vijaya,
    You can train approvers to Click on existing assignment button(in Access Request) to know the roles already assigned.
    And if in your environment, FF roles has distinguished naming convention then it can easily be identified
    by role owners.
    Thanks,
    mamoon

  • How to run report from multiple user same time

    Hi,
    We are using oracle database 11g R2
    Oracle Forms & reports : 11.1.2
    O.S : Windows & Professional
    We have install oracle database, Oracle forms & reports in server. Near about 25 users are accessing that database, forms & reports from server through browser.
    I have one problem, when users runs a report there report goes in queue and runs one by one in FIFO manner.
    If one user has a report that take long time other users has to wait for that time.
    Can it is possible to run reports in multitasking manner, i.e multiple report can be run simultaneously.
    http://servername:7001/reports/rwservlet/showjobs?
    Using above url am able to see jobs in queue.
    Thanks in advance.

    Hi Denie,
    I am new to it and don't know how to add engines to server.conf , can you please tell me how to add engine to it.
    I search server.conf file but i did't found it.
    Please help..
    Thanks in advance.

  • Exchange server 2010 Hub-Cas server role remove from organization

    Dear all,
    I am going to remove my one of my hub-cas(both the roles installed in same server)server from my organization.
    Cas server configured into cas array. So anyone please guide me to remove safely.
    Parthiban selvaraj

    Hi,
    From your description, I would like to clarify the following thing:
    If you use NLB, you need to remove the CAS server from your NLB cluster and then remove this CAS&Hub server. If you use other sort of load balancer, you need to use it to remove the server from the CAS array and then remove the server.
    Hope it helps.
    Best regards,
    Amy Wang
    TechNet Community Support

  • Data mixing when simultaneously inserting data from Multiple Users

    I am facing a problem in SQL Server 2000. My software designed in VB6 and problem is that when two or three users save the sale invoice at the same time then invoices data mixed up with each other. Please any person guide
    me. I shall be very thankful to you.

    Dear's All please read carefully my below code, I am using this vb6 query for the saving. my data saving in 4 tables and updating of 1 table.
    Private Sub Form_Load()
    Con
    Call AutoSaleId
    End Sub
    Public Sub AutoSaleId()
    If rs.State = adStateOpen Then
    rs.Close
    End If
    rs.Open ("Select SaleId From SALES Order By SaleId"), cn, adOpenKeyset, adLockOptimistic
    If rs.BOF Then
    SaleIdTxt.Text = "1"
    'Exit Sub
    End If
    On Error Resume Next
    rs.MoveLast
    SaleIdTxt.Text = rs("SaleId") + 1
    End Sub
    Private Sub SaveImg_Click()
    On Error GoTo Err_X
    If SaleIdTxt.Enabled = False Then
    If AuthorityTxt.Text = "N" Then
    MsgBox ("Sorry! You Have No Authority To Changing This Invoice Please Contact To Admin"), vbInformation, "Information"
    Exit Sub
    End If
    End If
    ChkSecureCust.Value = 0
    If rs.State = adStateOpen Then
        rs.Close
        End If
        rs.Open ("Select * From SECURECUSTOMERS Where DeliveryId='" & DeliveryIdTxt.Text & "'And SectorId='" & Left(CustomerIdTxt.Text, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
    If Not rs.EOF Then
    If rs(0) = DeliveryIdTxt.Text And rs(1) = Left(CustomerIdTxt.Text, 2) Then
    ChkSecureCust.Value = 1
    End If
    End If
    If DeliveryDescriptionTxt.Text = "" Then
    MsgBox ("Sorry! Please Select Delivery Then Press Save Button"), vbInformation, "Information"
    DeliveryIdTxt.SetFocus
    Exit Sub
    End If
    If SalemanIdTxt.Text = "" Then
    MsgBox ("Sorry! Please Create Sale Man Then Press Save Button"), vbInformation, "Information"
    SalemanCmb.SetFocus
    Exit Sub
    End If
    If BusinessGroupIdTxt.Text = "" Then
    MsgBox ("Sorry! Please Create Business Group Then Press Save Button"), vbInformation, "Information"
    BusinessGroupCmb.SetFocus
    Exit Sub
    End If
    If CustomerNameTxt.Text = "" Then
    MsgBox ("Sorry! Please Select Customer Then Press Save Button"), vbInformation, "Information"
    CustomerIdTxt.SetFocus
    Exit Sub
    End If
    If ChkSecureCust.Value = 0 Then
    MsgBox ("Sorry! Please Select Customers Related To Delivery"), vbInformation, "Information"
    CustomerIdTxt.Text = ""
    CustomerIdTxt.SetFocus
    Exit Sub
    End If
    'If Flx Grid is Empity Then This Message Will Be Create
    If SaleIdTxt.Enabled = True Then
    If Flx.Rows <= 2 Then
    MsgBox ("Sorry! Product Grid Is Empity Please Enter Products And Then Press Save Button"), vbCritical, "Warning"
    ProductIdTxt.SetFocus
    For j = 2 To RecFlx.Rows - 1
    If RecFlx.Rows > 2 Then
    RecFlx.RemoveItem (RecFlx.Rows)
    End If
    Next j
    For j = 2 To PurRetBatchFlx.Rows - 1
    If PurRetBatchFlx.Rows > 2 Then
    PurRetBatchFlx.RemoveItem (PurRetBatchFlx.Rows)
    End If
    Next j
    Exit Sub
    End If
    End If 'End
    For RF = 2 To RecFlx.Rows - 1
    If RecFlx.TextMatrix(RF, 5) = "" Then
    MsgBox ("Sorry! Batch Quantity Is Missing Of This Product(" + RecFlx.TextMatrix(RF, 1) + ")Please Enter The Batch Quantity."), vbInformation, "Information"
    Exit Sub
    End If
    Next RF
    'This Query For Assign (0) To Purchase Returns Batch Flx Columns Numbers Of 3 And 4
    For g = 2 To PurRetBatchFlx.Rows - 1
    PurRetBatchFlx.TextMatrix(g, 5) = "0"
    PurRetBatchFlx.TextMatrix(g, 6) = "0"
    PurRetBatchFlx.TextMatrix(g, 7) = "0"
    Next g 'End
    'This Query For, If Record Match Between Record Flx And Opening Batch Flx Then (1) No Assign To Opening Batch Flx Of Column No (3) For UpDates Tables When We Changing In Products And Batchs
    For a = 2 To RecFlx.Rows - 1
    For b = 2 To PurRetBatchFlx.Rows - 1
    If PurRetBatchFlx.TextMatrix(b, 0) & PurRetBatchFlx.TextMatrix(b, 1) & PurRetBatchFlx.TextMatrix(b, 2) = RecFlx.TextMatrix(a, 0) & RecFlx.TextMatrix(a, 1) & RecFlx.TextMatrix(a, 2) Then
    PurRetBatchFlx.TextMatrix(b, 5) = "1"
    End If
    Next b
    Next a 'End
    For c = 2 To Flx.Rows - 1
    For d = 2 To PurRetBatchFlx.Rows - 1
    If Flx.TextMatrix(c, 0) = PurRetBatchFlx.TextMatrix(d, 1) Then
    PurRetBatchFlx.TextMatrix(d, 6) = "1"
    End If
    Next d
    Next c 'End
    For i = 2 To Flx.Rows - 1
    Flx.TextMatrix(i, 12) = "0"
    Next i
    'For Auto Sale Id
    If SaleIdTxt.Enabled = True Then
        Call AutoSaleId
        End If
    'End Auto Sale Id
    For j = 2 To Flx.Rows - 1
        If rs.State = adStateOpen Then
        rs.Close
        End If
        rs.Open ("Select SaleId,ProductId From SALESBODY Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & Flx.TextMatrix(j, 0) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
    If Not rs.EOF Then
    On Error Resume Next
    If rs(1) = SaleIdTxt.Text And rs(2) = Flx.TextMatrix(j, 0) Then
    Flx.TextMatrix(j, 12) = "1"
    End If
    End If
        Next j
    For i2 = 2 To RecFlx.Rows - 1
    RecFlx.TextMatrix(i2, 7) = "0"
    RecFlx.TextMatrix(i2, 9) = "0"
    '11 Column For Check The Batch Into Current Stock If Any User Used This Batch
    RecFlx.TextMatrix(i2, 11) = "0"
    'Edit Able 11 Column For Check The Batch Into Current Stock If Any User Used This Batch
    If SaleIdTxt.Enabled = False Then
    RecFlx.TextMatrix(i2, 14) = "0"
    If RecFlx.TextMatrix(i2, 12) = "" Then
    RecFlx.TextMatrix(i2, 12) = "1"
    End If
    End If
    Next i2
    For g2 = 2 To RecFlx.Rows - 1
    If RecFlx.TextMatrix(g2, 6) = "" Then
    RecFlx.TextMatrix(g2, 6) = "N"
    End If
    Next g2
    For j2 = 2 To RecFlx.Rows - 1
        If rs.State = adStateOpen Then
        rs.Close
        End If
        rs.Open ("Select SaleId,ProductId,BatchNo From SALESBATCH Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & RecFlx.TextMatrix(j2, 1) & "' And BatchNo='" & RecFlx.TextMatrix(j2, 2) &
    "'"), cn, adOpenKeyset, adLockBatchOptimistic
    If Not rs.EOF Then
    On Error Resume Next
    If rs(0) = SaleIdTxt.Text And rs(1) = RecFlx.TextMatrix(j2, 1) And rs(2) = RecFlx.TextMatrix(j2, 2) Then
    RecFlx.TextMatrix(j2, 7) = "1"
    End If
    End If
        Next j2
    For h = 2 To RecFlx.Rows - 1
    If RecFlx.TextMatrix(h, 8) = "" Then
    RecFlx.TextMatrix(h, 8) = "N"
    End If
    Next h
     For h1 = 2 To RecFlx.Rows - 1
    If RecFlx.TextMatrix(h1, 10) = "" Then
    RecFlx.TextMatrix(h1, 10) = "Y"
    End If
    Next h1
    For h2 = 2 To PurRetBatchFlx.Rows - 1
    If PurRetBatchFlx.TextMatrix(h2, 8) = "" Then
    PurRetBatchFlx.TextMatrix(h2, 8) = "Y"
    End If
    Next h2
        For S = 2 To RecFlx.Rows - 1
        If rs.State = adStateOpen Then
        rs.Close
        End If
        rs.Open ("Select ProductId,BatchNo From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(S, 1) & "' And BatchNo='" & RecFlx.TextMatrix(S, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
    If Not rs.EOF Then
    If rs(0) = RecFlx.TextMatrix(S, 1) And rs(1) = RecFlx.TextMatrix(S, 2) Then
    RecFlx.TextMatrix(S, 9) = "1"
    End If
    End If
        Next S
        For G1 = 2 To PurRetBatchFlx.Rows - 1
        If rs.State = adStateOpen Then
        rs.Close
        End If
        rs.Open ("Select ProductId,BatchNo From CURRENTSTOCK Where ProductId='" & PurRetBatchFlx.TextMatrix(G1, 1) & "' And BatchNo='" & PurRetBatchFlx.TextMatrix(G1, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
    If Not rs.EOF Then
    If rs(0) = PurRetBatchFlx.TextMatrix(G1, 1) And rs(1) = PurRetBatchFlx.TextMatrix(G1, 2) Then
    PurRetBatchFlx.TextMatrix(G1, 7) = "1"
    End If
    End If
        Next G1
    'This Query For 11 Number Column For Check The Batch Into Current Stock If Any User Used This Batch
        If SaleIdTxt.Enabled = True Then
        For n2 = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(n2, 8) = "N" And RecFlx.TextMatrix(n2, 10) = "Y" Then
        RecFlx.TextMatrix(n2, 11) = "1"
        End If
        Next n2
        For n = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(n, 8) = "N" And RecFlx.TextMatrix(n, 10) = "Y" Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId = '" & RecFlx.TextMatrix(n, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(n, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If rs(0) = RecFlx.TextMatrix(n, 1) And rs(1) = RecFlx.TextMatrix(n, 2) Then
          RecFlx.TextMatrix(n, 11) = "2"
          End If
          End If
          End If
          Next n
          For n3 = 2 To RecFlx.Rows - 1
          If RecFlx.TextMatrix(n3, 8) = "N" And RecFlx.TextMatrix(n3, 10) = "Y" Then
          If RecFlx.TextMatrix(n3, 11) = "1" Then
          MsgBox ("Sorry! You Have No Stock Of This Product(" + RecFlx.TextMatrix(n3, 1) + ") And Batch(" + RecFlx.TextMatrix(n3, 2) + ")Because Any Other User Alredy Used This Batch Please Remove
    This Batch."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
          Next n3
          'End 11 Number Column Query
        End If
    'This Query For Check The Batch Qty From Current Stock If Any User Use This Batch Qty
          If SaleIdTxt.Enabled = True Then
          For f1 = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(f1, 8) = "N" And RecFlx.TextMatrix(f1, 10) = "Y" Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(f1, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(f1, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If Trim(Val(rs(2)) < Val(RecFlx.TextMatrix(f1, 5))) Then
          MsgBox ("Sorry! You Have Low Stock Of This Product(" + RecFlx.TextMatrix(f1, 1) + ") And Batch(" + RecFlx.TextMatrix(f1, 2) + ")Because Any Other User Alredy Used This Batch Qty Please
    Reduce This Qty."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
        End If
        Next f1
        End If
    'End The Query Of Check The Batch Qty If Any User Use This Batch Qty
        If SaleIdTxt.Enabled = False Then
        For f1 = 2 To RecFlx.Rows - 1
        For f = 2 To PurRetBatchFlx.Rows - 1
        If RecFlx.TextMatrix(f1, 8) = "N" And RecFlx.TextMatrix(f1, 10) = "Y" And RecFlx.TextMatrix(f1, 12) = "1" Then
        If RecFlx.TextMatrix(f1, 1) = PurRetBatchFlx.TextMatrix(f, 1) And RecFlx.TextMatrix(f1, 2) = PurRetBatchFlx.TextMatrix(f, 2) Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(f1, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(f1, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If Trim(Val(Val(rs(2)) + Val(PurRetBatchFlx.TextMatrix(f, 4))) < Val(RecFlx.TextMatrix(f1, 5))) Then
          MsgBox ("Sorry! You Have Low Stock Of This Product(" + RecFlx.TextMatrix(f1, 1) + ") And Batch(" + RecFlx.TextMatrix(f1, 2) + ")Because Any Other User Alredy Used This Batch Qty Please
    Reduce This Qty."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
          End If
          If Trim(RecFlx.TextMatrix(f1, 1) = PurRetBatchFlx.TextMatrix(f, 1) And RecFlx.TextMatrix(f1, 2) <> PurRetBatchFlx.TextMatrix(f, 2) Or RecFlx.TextMatrix(f1, 1) <> PurRetBatchFlx.TextMatrix(f, 1)) Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(f1, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(f1, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If Trim(Val(rs(2)) < Val(RecFlx.TextMatrix(f1, 5))) Then
          MsgBox ("Sorry! You Have Low Stock Of This Product(" + RecFlx.TextMatrix(f1, 1) + ") And Batch(" + RecFlx.TextMatrix(f1, 2) + ")Because Any Other User Alredy Used This Batch Qty Please
    Reduce This Qty."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
          End If
          If RecFlx.TextMatrix(f1, 1) = PurRetBatchFlx.TextMatrix(f, 1) Then
          RecFlx.TextMatrix(f1, 14) = "1"
          End If
          If RecFlx.TextMatrix(f1, 14) = "0" Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(f1, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(f1, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If Trim(Val(rs(2)) < Val(RecFlx.TextMatrix(f1, 5))) Then
          MsgBox ("Sorry! You Have Low Stock Of This Product(" + RecFlx.TextMatrix(f1, 1) + ") And Batch(" + RecFlx.TextMatrix(f1, 2) + ")Because Any Other User Alredy Used This Batch Qty Please
    Reduce This Qty."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
          End If
          End If
          Next f
          Next f1
          End If
        If SaleIdTxt.Enabled = False Then
        For n2 = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(n2, 8) = "N" And RecFlx.TextMatrix(n2, 10) = "Y" And RecFlx.TextMatrix(n2, 12) = "1" Then
        RecFlx.TextMatrix(n2, 11) = "1"
        End If
        Next n2
        For n = 2 To RecFlx.Rows - 1
        For r = 2 To PurRetBatchFlx.Rows - 1
        If RecFlx.TextMatrix(n, 8) = "N" And RecFlx.TextMatrix(n, 10) = "Y" And RecFlx.TextMatrix(n, 12) = "1" Then
        If RecFlx.TextMatrix(n, 1) = PurRetBatchFlx.TextMatrix(r, 1) And RecFlx.TextMatrix(n, 2) = PurRetBatchFlx.TextMatrix(r, 2) And Val(RecFlx.TextMatrix(n, 5)) <= Val(PurRetBatchFlx.TextMatrix(r, 4)) Then
          RecFlx.TextMatrix(n, 11) = "2"
          End If
        If RecFlx.TextMatrix(n, 1) = PurRetBatchFlx.TextMatrix(r, 1) And RecFlx.TextMatrix(n, 2) <> PurRetBatchFlx.TextMatrix(r, 2) Or RecFlx.TextMatrix(n, 1) <> PurRetBatchFlx.TextMatrix(r, 1) Then
          If rs.State = adStateOpen Then
          rs.Close
          End If
          rs.Open ("Select * From CURRENTSTOCK Where ProductId = '" & RecFlx.TextMatrix(n, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(n, 2) & "'"), cn, adOpenKeyset, adLockBatchOptimistic
          If Not rs.EOF Then
          If rs(0) = RecFlx.TextMatrix(n, 1) And rs(1) = RecFlx.TextMatrix(n, 2) Then
          RecFlx.TextMatrix(n, 11) = "2"
          End If
          End If
          End If
          End If
          Next r
          Next n
          For n3 = 2 To RecFlx.Rows - 1
          If RecFlx.TextMatrix(n3, 8) = "N" And RecFlx.TextMatrix(n3, 10) = "Y" And RecFlx.TextMatrix(n3, 12) = "1" Then
          If RecFlx.TextMatrix(n3, 11) = "1" Then
          MsgBox ("Sorry! You Have No Stock Of This Product(" + RecFlx.TextMatrix(n3, 1) + ") And Batch(" + RecFlx.TextMatrix(n3, 2) + ")Because Any Other User Alredy Used This Batch Please Remove
    This Batch."), vbInformation, "Information"
          Call EmptyGrid
          Exit Sub
          End If
          End If
          Next n3
          'End 11 Number Column Query
        End If
    '=========================================================
    'Start Saving Portion
    '=========================================================
        cn.BeginTrans
        If SaleIdTxt.Enabled = True Then
        cn.Execute ("Insert Into SALES(SaleId,DeliveryId,CustomerId,SaleManId,BusinessGroupId,SaleDate,PreviousBalance,GrossValue,TotalDis1,TotalDis2,TotalGst,AmountReceiveable,EditAuthority,AdjustNoteAmount,AdjustedNoteId)Values " &
    "('" & SaleIdTxt.Text & "','" & DeliveryIdTxt.Text & "','" & CustomerIdTxt.Text & "','" & SalemanIdTxt.Text & "','" & BusinessGroupIdTxt.Text & "','" &
    SaleDate.Value & "','" & Val(PreviousBalTxt.Text) & "','" & Val(GrossValTxt.Text) & "','" & Val(TotDis1Txt.Text) & "','" & Val(TotDis2Txt.Text) & "','" & Val(GSTValTxt.Text)
    & "','" & Val(NetValDecimalTxt.Text) & "','" & "N" & "','" & Val(AdjustNoteAmountTxt.Text) & "','" & AdjustNoteIdTxt.Text & "')")
        End If
        For i = 2 To Flx.Rows - 1
        If Flx.TextMatrix(i, 12) = "1" Then
        cn.Execute ("UPDATE SALESBODY SET Qty = '" & Flx.TextMatrix(i, 3) & "',Bonus = '" & Flx.TextMatrix(i, 4) & "',Price = '" & Val(Flx.TextMatrix(i, 5)) & "',SaleDiscountRatio = '"
    & Val(Flx.TextMatrix(i, 6)) & "',SaleDiscount2Ratio = '" & Val(Flx.TextMatrix(i, 7)) & "',STRatio = '" & Val(Flx.TextMatrix(i, 8)) & "',TotalValue = '" & Val(Flx.TextMatrix(i, 9)) & "',TotalSalesTax
    = '" & Val(Flx.TextMatrix(i, 10)) & "'WHERE SaleId='" & SaleIdTxt.Text & "' And ProductId='" & Flx.TextMatrix(i, 0) & "'")
        ElseIf Flx.TextMatrix(i, 12) = "0" Then
        cn.Execute ("Insert Into SALESBODY(SaleId,ProductId,Qty,Bonus,Price,SaleDiscountRatio,SaleDiscount2Ratio,STRatio,TotalValue,TotalSalesTax)Values " & "('" & SaleIdTxt.Text & "','" & Flx.TextMatrix(i,
    0) & "','" & Flx.TextMatrix(i, 3) & "','" & Flx.TextMatrix(i, 4) & "','" & Val(Flx.TextMatrix(i, 5)) & "','" & Val(Flx.TextMatrix(i, 6)) & "','" & Val(Flx.TextMatrix(i,
    7)) & "','" & Val(Flx.TextMatrix(i, 8)) & "','" & Val(Flx.TextMatrix(i, 9)) & "','" & Val(Flx.TextMatrix(i, 10)) & "')")
        End If
        Next i
        For p = 2 To PurRetBatchFlx.Rows - 1
        If PurRetBatchFlx.TextMatrix(p, 8) = "Y" Then
    Set rs = cn.Execute("Select * From CURRENTSTOCK Where ProductId='" & PurRetBatchFlx.TextMatrix(p, 1) & "' And BatchNo = '" & PurRetBatchFlx.TextMatrix(p, 2) & "'")
    If Not rs.EOF Then
    If rs(0) = PurRetBatchFlx.TextMatrix(p, 1) And rs(1) = PurRetBatchFlx.TextMatrix(p, 2) Then
        cn.Execute ("UPDATE CURRENTSTOCK SET Qty = '" & Val(rs("Qty")) + Val(PurRetBatchFlx.TextMatrix(p, 4)) & "' WHERE ProductId='" & PurRetBatchFlx.TextMatrix(p, 1) & "' And BatchNo = '"
    & PurRetBatchFlx.TextMatrix(p, 2) & "'")
        End If
        End If
        End If
        Next p
        For i2 = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(i2, 10) = "D" And RecFlx.TextMatrix(i2, 7) = "1" Then
        cn.Execute ("Delete From SALESBATCH Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & RecFlx.TextMatrix(i2, 1) & "'And BatchNo='" & RecFlx.TextMatrix(i2, 2) & "'")
        ElseIf RecFlx.TextMatrix(i2, 6) = "N" And RecFlx.TextMatrix(i2, 10) = "Y" Then
        cn.Execute ("Insert Into SALESBATCH(SaleId,ProductId,BatchNo,AvailQty,Qty,ExpDate)Values " & "('" & SaleIdTxt.Text & "','" & RecFlx.TextMatrix(i2, 1) & "','" & RecFlx.TextMatrix(i2,
    2) & "','" & RecFlx.TextMatrix(i2, 4) & "','" & RecFlx.TextMatrix(i2, 5) & "','" & Format(RecFlx.TextMatrix(i2, 3), "mm/dd/yyyy") & "')")
        End If
        Next i2
        For j = 2 To PurRetBatchFlx.Rows - 1
        If PurRetBatchFlx.TextMatrix(j, 6) = "0" Then
        Set rs = cn.Execute("Select * From SALESBODY Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & PurRetBatchFlx.TextMatrix(j, 1) & "'")
    If Not rs.EOF Then
    cn.Execute ("Delete From SALESBODY Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & PurRetBatchFlx.TextMatrix(j, 1) & "'")
    cn.Execute ("Delete From SALESBATCH Where SaleId='" & SaleIdTxt.Text & "' And ProductId='" & PurRetBatchFlx.TextMatrix(j, 1) & "' And BatchNo='" & PurRetBatchFlx.TextMatrix(j, 2) & "'")
    End If
    End If
        Next j
    'This Query For Update Current Stock Table
        For n = 2 To PurRetBatchFlx.Rows - 1
        If PurRetBatchFlx.TextMatrix(n, 8) = "D" Then
        If PurRetBatchFlx.TextMatrix(n, 7) = "1" And PurRetBatchFlx.TextMatrix(n, 8) = "D" Then
        Set rs = cn.Execute("Select * From CURRENTSTOCK Where ProductId='" & PurRetBatchFlx.TextMatrix(n, 1) & "'And BatchNo='" & PurRetBatchFlx.TextMatrix(n, 2) & "'")
    If Not rs.EOF Then
    If rs(0) = PurRetBatchFlx.TextMatrix(n, 1) And rs(1) = PurRetBatchFlx.TextMatrix(n, 2) Then
    cn.Execute ("UPDATE CURRENTSTOCK SET Qty = '" & Val(rs("Qty")) + Val(PurRetBatchFlx.TextMatrix(n, 4)) & "' WHERE ProductId='" & PurRetBatchFlx.TextMatrix(n, 1) & "' And BatchNo = '" & PurRetBatchFlx.TextMatrix(n,
    2) & "'")
    End If
    End If
    End If
    If PurRetBatchFlx.TextMatrix(n, 7) = "0" And PurRetBatchFlx.TextMatrix(n, 8) = "D" Then
        cn.Execute ("Insert Into CURRENTSTOCK(ProductId,BatchNo,Qty,ExpDate)Values " & "('" & PurRetBatchFlx.TextMatrix(n, 1) & "','" & PurRetBatchFlx.TextMatrix(n, 2) & "','" & PurRetBatchFlx.TextMatrix(n,
    4) & "','" & Format(PurRetBatchFlx.TextMatrix(n, 3), "mm/dd/yyyy") & "')")
    End If
    End If
    Next n
    For f = 2 To RecFlx.Rows - 1
        If RecFlx.TextMatrix(f, 8) = "N" And RecFlx.TextMatrix(f, 10) = "Y" Then
          Set rs = cn.Execute("Select * From CURRENTSTOCK Where ProductId='" & RecFlx.TextMatrix(f, 1) & "' And BatchNo = '" & RecFlx.TextMatrix(f, 2) & "'")
          If Not rs.EOF Then
          If rs(0) = RecFlx.TextMatrix(f, 1) And rs(1) = RecFlx.TextMatrix(f, 2) Then
          cn.Execute ("UPDATE CURRENTSTOCK SET Qty = '" & Val(rs("Qty")) - Val(RecFlx.TextMatrix(f, 5)) & "' WHERE ProductId='" & RecFlx.TextMatrix(f, 1) & "' And BatchNo = '" &
    RecFlx.TextMatrix(f, 2) & "'")
          End If
          End If
        End If
    Next f
    'End Query For Update Current Stock Table
        If SaleIdTxt.Enabled = True Then
        cn.Execute ("Insert Into CUSTOMERBALANCES(CustomerId,Transactions,IDS,BusinessGroupId,Date,Debit)Values " & "('" & CustomerIdTxt.Text & "','" & "2" & "','" & SaleIdTxt.Text
    & "','" & BusinessGroupIdTxt.Text & "','" & SaleDate.Value & "','" & Val(NetValDecimalTxt.Text) & "')")
        If AdjustNoteIdTxt.Text <> "" Then
        cn.Execute ("Insert Into ADJUSTEDCREDITNOTES(SaleId,NoteId,CustomerId,Date,AdjustAmount)Values " & "('" & SaleIdTxt.Text & "','" & AdjustNoteIdTxt.Text & "','" & CustomerIdTxt.Text
    & "','" & SaleDate.Value & "','" & Val(AdjustNoteAmountTxt.Text) & "')")
        cn.Execute ("UPDATE CREDITNOTES SET AdjustNotAdjust='" & "1" & "'Where NoteId='" & AdjustNoteIdTxt.Text & "'")
        End If
        ElseIf SaleIdTxt.Enabled = False Then
        cn.Execute ("UPDATE SALES SET DeliveryId='" & DeliveryIdTxt.Text & "',CustomerId='" & CustomerIdTxt.Text & "',SaleManId='" & SalemanIdTxt.Text & "',BusinessGroupId='" & BusinessGroupIdTxt.Text
    & "',SaleDate='" & SaleDate.Value & "',PreviousBalance='" & Val(PreviousBalTxt.Text) & "',GrossValue='" & Val(GrossValTxt.Text) & "',TotalDis1='" & Val(TotDis1Txt.Text) & "',TotalDis2='"
    & Val(TotDis2Txt.Text) & "',TotalGst='" & Val(GSTValTxt.Text) & "',AmountReceiveAble='" & Val(NetValDecimalTxt.Text) & "',EditAuthority='" & "N" & "',AdjustNoteAmount='" &
    Val(AdjustNoteAmountTxt.Text) & "',AdjustedNoteId='" & AdjustNoteIdTxt.Text & "'Where SaleId = '" & SaleIdTxt.Text & "'")
        cn.Execute ("UPDATE CUSTOMERBALANCES SET CustomerId = '" & CustomerIdTxt.Text & "',BusinessGroupId = '" & BusinessGroupIdTxt.Text & "',Date = '" & SaleDate.Value & "',Debit= '"
    & Val(NetValDecimalTxt.Text) & "' Where Transactions = '" & "2" & "'And IDS = '" & SaleIdTxt.Text & "'")
        If AdjustNoteIdTxt.Text <> "" Then
        cn.Execute ("Insert Into ADJUSTEDCREDITNOTES(SaleId,NoteId,CustomerId,Date,AdjustAmount)Values " & "('" & SaleIdTxt.Text & "','" & AdjustNoteIdTxt.Text & "','" & CustomerIdTxt.Text
    & "','" & SaleDate.Value & "','" & Val(AdjustNoteAmountTxt.Text) & "')")
        cn.Execute ("UPDATE CREDITNOTES SET AdjustNotAdjust='" & "1" & "'Where NoteId='" & AdjustNoteIdTxt.Text & "'")
        ElseIf AdjustNoteIdTxt.Text <> "" Then
        cn.Execute ("UPDATE ADJUSTEDCREDITNOTES SET SaleId='" & SaleIdTxt.Text & "',NoteId='" & AdjustNoteIdTxt.Text & "',CustomerId='" & CustomerIdTxt.Text & "',Date='" & SaleDate.Value
    & "',AdjustAmount='" & Val(AdjustNoteAmountTxt.Text) & "'Where NoteId='" & AdjustNoteIdTxt.Text & "'")
        End If
        End If
        cn.CommitTrans
        cn.Execute ("Delete From CURRENTSTOCK Where Qty='" & 0 & "'")
    If MsgBox("Record Save Successfully.For Waranty Press YES And For Without Waranty Press No", vbYesNo + vbExclamation, "Question") = vbYes Then
      ViewSaleInvoice.Show
      Else
      ViewUnWarrantedSaleInvoice.Show
      End If
     'Clear All Text Boxes
     ClearImg_Click
    Err_X:
    If Err.Number <> 0 Then
    ' Display error meesage ...
        MsgBox "SQL " + Err.Description + " Try Again", vbCritical, "SQL Error"
        Err.Clear
        cn.RollbackTrans
        Exit Sub
        End If
    End Sub

  • Waiting for Task Completion from multiple users

    iam using Weblogic8.1 Integration BPM to design a worklist application. I need
    to create a number of Tasks(number know only at runtime), assign to users and
    wait for the completion of each of these task. I've tried using the Task Control
    factory to accomplish this. But iam not able to hold the process instance execution
    till each of these task is completed. The control gets released from the TaskControlFactory_onTaskCompleted
    as soon as one of the above created task is completed.
    Pls. let me know if there is a way to achieve this.
    Regards
    Raja V.

    Try to put the onTaskCompleted Control Receive in a loop which counts how
    many of these
    callbacks have already arrived, and the loop exit condition would be that
    the count is equal
    to the number of the created tasks.
    Regards,
    Robert Varga
    "Raja V" <[email protected]> wrote in message
    news:3f423f82$[email protected]..
    >
    iam using Weblogic8.1 Integration BPM to design a worklist application. Ineed
    to create a number of Tasks(number know only at runtime), assign to usersand
    wait for the completion of each of these task. I've tried using the TaskControl
    factory to accomplish this. But iam not able to hold the process instanceexecution
    till each of these task is completed. The control gets released from theTaskControlFactory_onTaskCompleted
    as soon as one of the above created task is completed.
    Pls. let me know if there is a way to achieve this.
    Regards
    Raja V.

  • My company uses Firefox on Server 2008 R2 and need to set up selective mass cookie removal for multiple users at one time.

    Our company just started using Firefox due to some website compatibility issues with IE. We had a 3rd party tool clearing all cookies without any exception options. We are now needing include exceptions for cookie removal due to website security changes. Is there a way to setup all users on the server to have the same cookie removal profile without doing individual setups?

    Go to the '''[https://addons.mozilla.org/en-US/firefox/ Mozilla Add-ons Web Page]''' {web link}
    (There’s a lot of good stuff here) and search for what you want.

Maybe you are looking for