Developer's code reviews and varsion control

Hi,
Suppose I am planning to hire 10 apex developers to work on some internet project.
How can I organize the code review process?
How can I see what code a developer has changed and what exactly he's changed in the code?
How can I see the code before it has been changed?
How to see the properties of any object is changed and by whom?
Is it possible to use any control version system with apex development process?
Thanks.

Joel_C wrote:
I agree with your approach - delegating to packages is definitely a sensible method. However, I'm interested to know the degree to which you delegate.It depends... !
For example, do you explicitly reference page items in your packages (perhaps via the 'V' function and APEX_UTIL.SET_SESSION_STATE calls), or do you tend to pass them via parameterized procedure calls? In which case, how do you deal with multiple page items (by which I mean, more than 3 or 4).If there is just a parameter or two being passed from the page, I tend to pass them as parameters from the page process. Very often, all you need to pass is the primary key (ID) of the entity you are working on. So I would write code like this in a page process:
begin
  foo_pkg.delete_foo (:p10_foo_id);
end;Other times, you may need to get the values of several (or all) items on a page. This would typically be when you want to write your own update logic instead of relying on the built-in Automatic Row Processing. Of course this is more work, but you typically only do this for the important entities/pages anyway, so it's worth it for the extra control.
The question then is, should I write something like this:
begin
  foo_pkg.update_foo (:p10_foo_id, :p10_foo_name, :p10_foo_description, :p10_foo_date, :p10_foo_remarks, :p10_foo_link);
end;or just do
begin
  foo_pkg.update_foo;
end;and use V('P10_FOO_ID') or apex_util.get_session_state ('P10_FOO_ID') inside my packaged PL/SQL code to retrieve the item values?
I've used both approaches, but I prefer to use the second option if I know (or suspect) that there is going to be additional logic (ie, "if X then get value of item Y, otherwise get value of item Z"). Having this kind of stuff in a package means that it can be changed easily, without having to redeploy the Apex application.
Said another way, I don't want any "IF" statements in Page Process code.
I'm interested in this, relating to my previous posting about testing - it's kind of difficult to unit test Apex application elements unless you fully modularize your code but there has to be a balance between modular, reusable code and page-specific, item-level code.My approach is two use two layers of packages. Let's say we are building a system that handles invoices. I would create a package called INVOICE_PKG that contains functions such as new_invoice and get_invoice, and procedures such as delete_invoice and set_invoice. This is your "core API" for working with invoices. This package is never called by the client (the Apex application, or a Java program, or whatever) directly.
I then create another package, INVOICE_WEB_PKG, which exposes the functions and procedures that the client needs to call. This package just calls INVOICE_PKG to do the actual work. In this outer package, I can decide whether I want to use input parameters or just get the values from Apex session state.
So a page process on a page with lots of page items could look like this:
begin
  invoice_web_pkg.set_invoice;
end;And the code inside INVOICE_WEB_PKG could look like this:
procedure set_invoice
as
  l_invoice invoice%rowtype;
begin
  l_invoice.invoice_id := apex_util.get_session_state ('P10_INVOICE_ID');
  l_invoice.invoice_date := apex_util.get_session_state ('P10_INVOICE_DATE');
  -- and so on for many more items
  invoice_pkg.set_invoice (l_invoice);
end;BTW, if you download my Alexandria Library for PL/SQL (http://code.google.com/p/plsql-utils/), you will find an APEX_UTIL_PKG that has a couple of wrapper functions to get and set page items (strings, numbers, dates).
By having two layers of packages, you can write unit tests (and other non-GUI code) against the inner package, and leave all the GUI/Apex-specific stuff in the outer package. For example, any code that formats content with HTML or prints anything to the browser (using HTP.P) should go in the outer package.
- Morten
http://ora-00001.blogspot.com

Similar Messages

  • Code Review Tool

    Hi Gurus,
    I have a requrement to make a Code Review tool which will do SLIN check as well as
    the code inspector check, in my custom program.
    In my selection screen i am giving the program name ,
    how can I do SLIN and Code inspector check and show results to user in list.kindly guide me the
    way i can do this.
    Amresh

    Hello Raj,
    There are few companies who have developed the code review tool. Still after running tool, manual review is done as auto review gives generic kind of suggestions. This tool development had lot man hours involvement. They had taken this tool as a project and still it is not a full proof tool.
    For you to do a simple way is have a report with selection screen which will accept the input parameter as program name. Inside your report have BDC written to run code inspector through SE38 skipping the first screen. Show code inspector results. After that you can show a SQL trace transaction screen (for which again you will have a BDC call)... etc
    Thank You,
    Nishikant.

  • Post Commit code Review Linking in the TFS Warehouse

    Hello
    I am having problems trying to find code reviews associated with a change set where the review and been after checkin. So the reviews are generated by History view --> double click on the changeset --> Actions --> Request Review.
    I understand that when its from a changeset (post-checkin), there is only a link from the code review to the changeset and nothing between the Changeset and the code review.  However when I am looking through the TFS Warehouse I cannot find any table holding
    the link between the code review and the changeset. I expected it to be in the FactWorkItemChangeset but its not there. 
    Is this possible from the TFS Warehouse? 
    Thanks for looking.

    Hi SimonAzurec,  
    Thanks for your post.
    Currently, we can only double click on the changeset to check which code review(s) linked to this changeset in Team Explorer. Please refer to the screenshot in this post:
    http://stackoverflow.com/questions/14103788/tfs-2012-how-can-i-tell-if-a-changeset-was-code-reviewed. 
     After you checked in, please open the linked Code Review Request work item in VS, you will find there’s no changeset shows under
    LINKS table.    
    For this scenario, please submit it to User Voice site at:
    http://visualstudio.uservoice.com/forums/121579-visual-studio. Microsoft engineers will evaluate them seriously.
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • ABAP Code Review

    Hello Experts--
    I have query where I will require your expert comments. I would like to check the quality of ABAP code with reference to
    (a) Program logic
    (b) Performance issues
    (c) Table joint
    (d) Buffer being used
    (e) Index etc etc
    Is there any tool in SAP or any third party tool which can help to check the quality of code.
    Thanks in advance for your reply.
    Regards
    --Anshuman

    Dear Anshuman,
    Look at the transaction code SCI- Code Inspector and SLIN- Extended program Check - These both together will definitely help you in to a large exten check in your code review and which can help to check you ABAP Code Quality.
    There also can be some obsolete statements which need to be take care of and also some SQL queries which are not longer supported in OOPs context.
    So hope this will help you to a lot extent in determining the Quality Code.
    There are additional Transactions like SE30, ST05 which may help you to know about the performance or time consumption of your programs as such.
    Hope this too helps you.
    Encourage others to answer you queries by suitably rewarding them
    Thanks
    Venugopal

  • Code reviews in TFS2013

    Guys
                  We are moving TFS 2010 to TFS 2013. I need to lean/implement new features. Can anyone explain the list of all potential
    features that my teams can avail after this upgrade.
    Secondary , I have seen code reviews feature that looks pretty fruitful. I have run the cycle. I have couple of questions in this regard.
    1. Code review request/response is just like that of chatting boxes in "My Work" feature which beautifully communicate request/responses of among resources. What is objective of CRRequest/CRResponse work items in TFS2013 if things going on at better
    level in Chat rooms of My Work view? 
    2. Up to which extent i can customize my work items of Code Reviews (Request/Response)
    Your response in this regard will be highly appreciated.
    Thanks
    Waseem Bukhari
    CMer.
    WSBukhari

    Hi WSBukhari,
    Thanks for your post. 
    For the new features in TFS 2013, please refer to this document:
    http://msdn.microsoft.com/en-us/library/bb385832.aspx.   
    When we request a Code Review and submit it, there will create a CR Request work item and CR Response work item(s) for this code review, then we can tracking this code review as work items, and view the owners, states or created data… in that work items.
    You can add your requirement/custom fields in CR Request or Response work tem types.
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • WLS/J2EE developer code review template?

    I have a requirement for a "code review template" that could act as a check list for a J2EE and/or Weblogic Server application code review.
    Has anyone ever done such a code review or have an idea of what should be included?
    Thanks for any help you may be able to give.
    John Wheeler.

    I am not quite sure what either of you are after, but if you hit the "Documentation" link on OTN you will find the documentation, such as the above list, for almost all of Oracle products. Most are available online in HTML format or PDF and some have a part number so that they can be ordered.
    The 10g Developer Suite Documentation is here: http://otn.oracle.com/documentation/dev10g.html
    Regards
    Sue

  • Developing a code with multiple GET and POST requests

    hi all,
    i have a requirement to upload a video file to a server and i need your help to develop the code using java .Basically it has several steps like
    1) A GET request should be made to the server with parameters like file name,size etc
    2) The response from the server is an XML document which contains a list of URLs to upload the file to.
    3) Get the URL from the XML and POSTyour file to the URLs listed in response.
    4) After POSTing the video file to the url(s) you received in the Create Video request, a GET request should be made to this URL to signal that a video has finished uploading in its entirety and check for the response code to see if the file is uploaded
    5) If an upload cannot be completed signal that has uplaod has failed by by making another GET request to the server
    I am not sure how can i implement all these steps in one single java program. Can someone please advise
    Thank You

    ForumKid2 wrote:
    Although you could technically do it all in one Java class, it makes no sense.Agreed 100%. But the question was how to do it in one program, which of course could contain numerous classes. (Unless the OP is confused about what a program is...)

  • Two Company Codes and one Controlling  Area  Issue

    Hi,
    Client has company code 1000 and 1001
    Company code 1000 has been assigned to controlling  area 1000,but company code 1001 was not assigned to controlling area.but in last month they have posted FB75 credit memo with profit center.Now when they are trying to post the same it is giving the error saying company code was not assigned to controlling area.
    they are also using document splitting concept.How to solve this issue without assigning profit center.
    why this is giving the error now and why it was accepted before.any idea.
    Thanks
    Sunitha

    HI,
    Can u explain clearly for which company code u have posted document in FB75. If it is 1001 Company code It will not able to take Profit center or any cost object. Since u have not assigned comapny code 1001 to controlling area 1000.
    Please check Correctly.
    Regards,
    Sreekanth

  • Company code currency and controlling area currency

    Hello gurus,
          I have doubt can any body clarify me
    My company code currency is INR where as my controlling area currency is EUR. now my question is controlling gets all the data from functional modules like FI,MM,SD.. all the modules are maintained in INR ( Company code currency).
    but my controlling area is currency is EUR.
         Because of the above scenario what is impact
    Regardsm
    sankar

    Hello
    I have almost similar question...
    When executing a profit center report for a company code with another currency (SEK) than the Controlling Area currency (DKK) I get the figures in DKK. When executing a Cost Center report for the same area I get the figures in SEK because of 'Object currency' in RPC0.
    Will I not be able to get data in Profit Center reports in SEK without make a currency 'translation' where I have to choose an Exchange rate type and date?
    Thanks in advance
    Best Regards
    Søren Kirch
    LOGSTOR

  • HT201304 ello my little brother has developed lock my iPhone and I could not see the unlocking code Please help and thank you

    Hello
    ello my little brother has developed lock my iPhone and I could not see the unlocking code Please help and thank you
    edited by host

    Hi Omar_a983,
    If you are having an issue with the passcode on your iPhone, you may find the following article helpful:
    iOS: Forgotten passcode or device disabled after entering wrong passcode
    http://support.apple.com/kb/ht1212
    Regards,
    - Brenden

  • [svn:osmf:] 12677: Code cleanup and changes after code review.

    Revision: 12677
    Revision: 12677
    Author:   [email protected]
    Date:     2009-12-08 16:11:31 -0800 (Tue, 08 Dec 2009)
    Log Message:
    Code cleanup and changes after code review.
    Modified Paths:
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/CaptioningPluginInfo.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/loader/CaptioningLoader.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/media/CaptioningProxyElement.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/model/Caption.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/model/CaptionFormat.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/model/CaptioningDocument.as
        osmf/trunk/plugins/CaptioningPlugin/org/osmf/captioning/parsers/DFXPParser.as

    Hi Zpittman,
    What is you said ‘Code Review Tool’?
    I assume that you meant the Code Review feature in TFS. I tried it in Visual Studio 2013 with update 4 and TFS 2013 with Update 4, the whitespace was detected and the code review see it as a difference.
    If you don’t get the same result with me using VS and TFS, please upgrade your VS and TFS to the latest update.
    If the issue still exists, please
    reset your VS settings through Tools->Import and Export settings->Reset all
    settings->…. and repair your VS.
    If code review tool is a third-party tool or a third-party VS/TFS add-in, the official support of this tool can be a better place to resolve your issue.
    If I misunderstood anything, please feel free to come back.
    Thanks,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Database DAO - JDBC Query Class - Code review please

    I use the following class (Database.java) as a DAO for handling all database calls. The class works. You can use this if you're looking for a DAO solution (i.e. a way to query databases using connection pools / JNDI). I am looking for some suggestions on improving this class. Can you help? I.e. suggestions for improving SELECT speed, logic? The class is used by a moderately heavily used Web application (ca. 2000 - 3000 queries a day - so not too much) on a Sun Web Server system.
    This class had the following interfaces:
    getErrors() // for retrieving any errors that occurred during an query
    setSql() // one way to set the SQL that must be run
    setDbName() // one way to set the JNDI name of the database resource
    getInsertDelete() // run the INSERT/DELETE statement that was provided with setSql
    getInsertDelete(String givenSql, String givenDb) // run with provided sql and db
    getClobInsert(String givenSql, String givenDb, Hashtable clobHash, String identifierSql) // clobHash contains the column name and the value (which is a string over 4000 chars). Identifier SQL is the SQL for identifying the row, into which the Clob must be inserted. This interface is specific to Oracle.
    getSelect() // Query database with set SQL. Return as a vector of hashes so I can close connection.
    getSelect(String givenSql, String givenDb) // select with given sqlAnd here is the full class. I know, this is a weird post, but we don't really have a code review process here at work, and I don't have a specific problem. Just want some feedback concerning the way I query our databases. So, any tips or comments are welcome.
    package melib.network;
    import java.io.Writer;
    import java.io.StringReader;
    import java.io.IOException;
    import java.util.Vector;
    import java.util.Hashtable;
    import java.sql.Connection;
    import java.sql.Statement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Clob;
    import javax.sql.DataSource;
    import javax.naming.InitialContext;
    import melib.system.PropertiesReader; // This is just a simple class for pulling values from a .properties file
    * Manages database connections.
    * @author jetcat33
    * @version 2.0, 2006-07-09
    public class Database {
        protected String sql = "";
        protected String dbName = "";
        private StringBuffer errors = new StringBuffer();
        /** Creates a new instance of Database */
        public Database() {
         * Check completeness of data
         * for example to check if dbname given or
         * sql given or to make sure that yikes
         * used instead of sccweb in test conditions
        protected boolean checkData(){
            if(dbName.equals("") || sql.equals("")){
                Email.sendMail(PropertiesReader.getValue("statusEmail"),null,"MelibLibraryError","melib error: [Database]","No database selected for query (db: "+dbName+" or sql not included (sql: "+sql+")");
                setErrors("No database selected for query (db: "+dbName+" or sql not included (sql: "+sql+")");
                return false;
            }else{
                return true;
         * Sets and gets errors resulting from
         * exceptions - otherwise would have to
         * somehow include errors in the results
         * that are returned but that would include
         * other more complicated stuff.
        private void setErrors(String e){
            errors.append("\n"+e);
        public StringBuffer getErrors(){
           return errors;
         * Setter for the sql variable.
         * @param givenSql The sql required to process
        public void setSql(java.lang.String givenSql) {
            sql = givenSql;
         * Sets the dbName needed to commect
         * to the correct database.
         * @param givenDbName Name of the database - name and connections specified within this class
        public void setDbName(java.lang.String givenDbName) {
            dbName = givenDbName;
         * Processes Insert and Delete requests with given SQL and DB Name.
         * @param givenSql
         * @param givenDbName
         * @return String Number of rows affected
        public String getInsertDelete(String givenSql, String givenDbName){
            sql = givenSql;
            dbName = givenDbName;
            return getInsertDelete();
         * Takes care of insert, update and delete requests.
         * Must have set both dbName as well as the sql String.
         * Will return number of rows affected as String.
         * @return String Number of rows affected
         * @exception Exception
        public String getInsertDelete() {
            int returnValue = 0;
            if(checkData()){
                Connection conn = null;
                InitialContext initContext = null;
                DataSource source = null;
                Statement stmt = null;
                try{
                    // Get connection from configured pool
                    initContext = new InitialContext();
                    source = (DataSource) initContext.lookup("java:comp/env/jdbc/" + dbName);
                    conn = source.getConnection();
                    if(conn != null){
                        stmt = conn.createStatement();
                        returnValue = stmt.executeUpdate(sql);
                }catch (Exception e){
                    Email.sendMail(PropertiesReader.getValue("statusEmail"),null,"MelibLibraryError","melib error: [Database.getInsertDelete]","getInsertDelete Exception: "+e.toString()+"\nWith: "+sql);
                    setErrors(e.toString());
                }finally{
                    try{
                        stmt.close();
                    }catch(Exception e){
                        e.printStackTrace();
                    try{
                        conn.close();
                    }catch(Exception e){
                       e.printStackTrace();
                    try{
                        initContext.close();
                    }catch(Exception e){
                        e.printStackTrace();
            return returnValue+"";
         * Processes Insert requests for SQL containing CLOBS
         * @param givenSql
         * @param givenDbName
         * @param clobHash Contains column name of clob and clob text
         * @param identifierSql Contains SQL to identify the just entered SQL so the clobs can be filled in.
         * @return String Number of rows affected
        public String getClobInsert(String givenSql, String givenDbName, Hashtable clobHash, String identifierSql){
            sql = givenSql;
            dbName = givenDbName;
            String returnValue="";
            int rv = 0;
            if(checkData()){
                Connection conn = null;
                InitialContext initContext = null;
                DataSource source = null;
                Statement stmt = null;
                try{
                    // Get connection from configured pool
                    initContext = new InitialContext();
                    source = (DataSource) initContext.lookup("java:comp/env/jdbc/" + dbName);
                    conn = source.getConnection();
                    if(conn != null){
                        conn.setAutoCommit(false);
                        stmt = conn.createStatement();
                        rv = stmt.executeUpdate(sql); // write first time
                        // Now get and overwrite "EMPTY_CLOB()"
                        ResultSet lobDetails = stmt.executeQuery(identifierSql);
                        ResultSetMetaData rsmd = lobDetails.getMetaData();
                        if(lobDetails.next()){
                            for(int i = 1; i <= rsmd.getColumnCount(); i++){
                                if(clobHash.get(rsmd.getColumnName(i))!=null && !clobHash.get(rsmd.getColumnName(i)).equals("")){
                                    Clob theClob = lobDetails.getClob(i);
                                    Writer clobWriter = ((oracle.sql.CLOB)theClob).getCharacterOutputStream();
                                    StringReader clobReader = new StringReader((String) clobHash.get(rsmd.getColumnName(i)));
                                    char[] cbuffer = new char[30* 1024]; // Buffer to hold chunks of data to be written to Clob, the slob
                                    int nread = 0;
                                    try{
                                        while((nread=clobReader.read(cbuffer)) != -1){
                                            clobWriter.write(cbuffer,0,nread);
                                    }catch(IOException ioe){
                                       //System.out.println("E: clobWriter exception - " + ioe.toString());
                                    }finally{
                                        try{
                                            returnValue+=" Writing: "+rsmd.getColumnName(i);
                                            clobReader.close();
                                            clobWriter.close();
                                        }catch(IOException ioe2){
                                            //System.out.println("E: clobWriter close exception - " + ioe2.toString());
                        conn.commit();
                }catch (Exception e){
                    Email.sendMail(PropertiesReader.getValue("statusEmail"),null,"MelibLibraryError","melib error: [Database.getClobInsert]","getClobInsert Exception: "+e.toString()+"\nWith: "+sql+"\nAND\n"+identifierSql);
                    setErrors(e.toString());
                }finally{
                    try{
                        stmt.close();
                    }catch(Exception e){
                        e.printStackTrace();
                    try{
                        conn.close();
                    }catch(Exception e){
                       e.printStackTrace();
                    try{
                        initContext.close();
                    }catch(Exception e){
                        e.printStackTrace();
                returnValue=rv+" "+returnValue;
            return returnValue;
         * Takes care of Select statements.
         * Must have set both dbName as well as the sql String.
         * Will return a vector.
         * @return Vector of Hashes containing the Results of the query
         * @exception SQLException
         * @exception Exception
        public Vector getSelect(){
            Vector returnValue = new Vector();
            if(checkData()){
                Connection conn = null;
                InitialContext initContext = null;
                DataSource source = null;
                ResultSet result = null;
                ResultSetMetaData rsmd = null;
                Statement stmt = null;
                try{
                    // Get connection from configured pool
                    initContext = new InitialContext();
                    source = (DataSource) initContext.lookup("java:comp/env/jdbc/" + dbName);
                    conn = source.getConnection();
                    if(conn != null){
                        stmt = conn.createStatement();
                        result = stmt.executeQuery(sql);
                        rsmd = result.getMetaData();
                        while(result.next()){
                            Hashtable hash = new Hashtable();
                            for(int i = 1; i <= rsmd.getColumnCount(); i++){
                                if(result.getString(i) != null){
                                    hash.put(rsmd.getColumnName(i),result.getString(i));
                                }else{
                                    hash.put(rsmd.getColumnName(i),"");
                            returnValue.addElement(hash);
                }catch (Exception e){
                    Email.sendMail(PropertiesReader.getValue("statusEmail"),null,"MelibLibraryError","melib error: [Database.getSelect]","getSelect Exception: "+e.toString()+"\nWith: "+sql);
                    setErrors(e.toString());
                }finally{
                    try{
                        result.close();
                    }catch(Exception e){
                        e.printStackTrace();
                        setErrors(e.toString());
                    try{
                        stmt.close();
                    }catch(Exception e){
                        e.printStackTrace();
                        setErrors(e.toString());
                    try{
                        conn.close();
                    }catch(Exception e){
                       e.printStackTrace();
                       setErrors(e.toString());
                    try{
                        initContext.close();
                    }catch(Exception e){
                        e.printStackTrace();
                        setErrors(e.toString());
            return returnValue;
         * Takes care of Select statements with given SQL.
         * Must have set both dbName as well as the sql String.
         * Will return a vector.
         * @return Vector with Results of the query
         * @exception SQLException
         * @exception Exception
        public Vector getSelect(String givenSql, String givenDbName){
            sql = givenSql;
            dbName = givenDbName;
            return getSelect();
    }Thank you,
    dailysun

    too much code that's repeated. refactor all the code you have for closing resources into a utility class and simply call its methods.
    your dao creates the connection, so it can't participate in a transaction. if there are several daos that should be one unit of work, you can't manage it with this framework.
    transactions are under the control of a service layer. I think it's better to have the service object get the connection, pass it to all the DAOs needed for that unit of work, and then have the service close it.
    e-mailing errors? I don't like it. if you have 2-3K queries a day failing because the database you'll have 2-3K e-mails to delete. better to log messages. if you really want e-mail, you can have Log4J add an e-mail appender. at least that way it's configurable outside the code.
    CRUD operations without an UPDATE? You're missing something important.
    What if I don't want to get the database from a JNDI datasource? Now you can't use this DAO without an app server.
    Your error messages are less informative than a stack trace. Why not throw an exception with detailed info?
    have a look at Spring and how it handles persistence. if you insist on writing your own, might want to look at Spring. Rod Johnson has developed a much better, more general way to handle persistence.
    http://www.springframework.org
    You return a Vector of Hashtables for queries? Two old-school data structures. You understand the implication of choosing those, right? I'd recommend that you change that to a List of Maps. Let the concrete types be ArrayList and HashMap. Interfaces are preferred, because they let you change the implementation without affecting clients. Vector and Hashtable are synchronized by default; ArrayList and HashMap are not. Synchronization is thread safe but slower.
    I understand why you chose to return Vector, because you wanted something general that wouldn't force you to deal with object-relational mapping. This way you can just worry about ResultSetMetaData.
    A Vector of Hashtables is a row-based view of the ResultSet (one Hashtable per row). Sometimes a column based view can be more convenient. Then it's a Map of Lists.
    You gave it a good try, but I think there's a lot of room for improvement.
    %

  • Are there any good tool for checking security risks, Code review, memory leakages for SharePoint projects?

    Are there any good tool for checking security risks, Code review, memory leakages for SharePoint projects?
    I found one such tool "Fortify" in the below link. Are there any such kind of tools available which supports SharePoint?
    Reference: http://www.securityresearch.at/en/development/fortify/
    Amalaraja Fernando,
    SharePoint Architect
    Please Mark As Answer if my post solves your problem or Vote As Helpful if a post has been helpful for you. This post is provided "AS IS" with no warrenties and confers no rights.

    Hi Amalaraja Fernando,
    I'm not sure that there is one more tool that combines all these features. But you may take a look at these solutions:
    SharePoint diagnostic manager
    SharePoint enterprise manager
    What is SPCop SharePoint Code Analysis?
    Dmitry
    Lightning Tools Check
    out our SharePoint tools and web parts |
    Lightning Tools Blog | Мой Блог

  • Looking help for developing labview code [Urgent]

    Hi,
    I need help in developing labview code. I am new to labview and will appreciate if someone can help me in this matter. I need to control the intensity of AC load (halogen lamp with 2kW,230V,50Hz) using Labview and Arduino. But my project using interrupt in Arduino, so it is not possible to use Labview Interface For Arduino(LIFA).  I searched and it might be possible to use VISA serial in this matter. Attached is the circuit and the code of Arduino. Someone who is expert in this matter can help me?
    The concept of my project is almost same with https://www.youtube.com/watch?v=oeVJ5bs6E8M&feature=youtu.be
    Solved!
    Go to Solution.
    Attachments:
    Zero Cross Circuit.docx ‏203 KB
    Triggering Circuit.docx ‏48 KB
    Coding for Arduino.txt ‏7 KB

    Hi,
    You will find all information you need and LabVIEW VI examples on the LabVIEW Interface for Arduino
    LabVIEW Interface for Arduino
    Regards,
    Valentin
    Certified TestStand Architect
    Certified LabVIEW Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France

  • Can some body help me to develop labview code for generating pulse to drive ac servo motor

    can some body help me to develop labview code for generating pulse to drive ac servo motor... i am using NI 9401 card ....tnx

    Driving an AC servo motor would (I missed AC on the previous msg) requires some complex hardware. This is generally done by drivers specifically designed for this purpose. I doubt you will be able to accomplish this with the hardware you currently have and it might be cheaper to just buy a driver for it and control the speed through the driver.

Maybe you are looking for